python – PEP0484类型提示:注释给定类的参数,而不是实例

首先让我解释一些样本.

假设有一个Web API客户端模块(MyAPIClient),一个将任意响应转换为
Python对象(ObjectMapper)的映射器类,以及一个表示响应对象(User和Message)的类.

class User(MyResponse):
    def __init__(self, status: int, id: int, name: str) -> None:
        super().__init__(status)
        self.id = int
        self.name = name

class Message(MyResponse):
    def __init__(self, status: int, id: int, text: str) -> None:
        super().__init__(status)
        self.id = int
        self.text = name

class ObjectMapper(object):
    def __init__(self, mapping_class: ???) -> None:
        self.mapping_class = mapping_class

    def map(self, obj) -> MyResponse:
        return self.mapping_class(**kwargs)

class MyAPIClient(object):
    def __init__(self, ...) -> None:
        pass

    def get_current_user(...) -> User:
        self.request("GET", "/current_user", ObjectMapper(User))

    def get_message(...) -> Message:
        self.request("GET", "/message", ObjectMapper(Message))

    def request(method: str, endpoint: str, mapper: ObjectMapper):
        res = requests.request(...)
        return json.loads(response.content.decode(), object_hook=mapper.map)

如上例所示,ObjectMapper接收名为“mapping_class”的参数.这不是类的实例,而是MyAPIClient#get_current_user和MyAPIClient#get_message中显示的类本身.我的问题是我应该如何在ObjectMapper #__ init__中注释这个mapping_class,它当前标记为“???”在上面的示例中.

最佳答案 类本身是
callable,它返回该类的实例.解决方案可以是:

mapping_class: Callable[..., MyResponse]
点赞