PEP0484 Sugerencia de tipo: anotando el argumento de una clase dada, no una instancia

Déjame explicarte con alguna muestra, primero.
Supongamos que hay un módulo cliente de API web (MyAPIClient), una clase de asignador que convierte una respuesta arbitraria en un objeto de Python (ObjectMapper) y una clase que representa un objeto de respuesta (Usuario y Mensaje).

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) 

Como se muestra en el ejemplo anterior, ObjectMapper recibe un argumento llamado “mapping_class”. Esta NO es una instancia de la clase, sino una clase como se muestra en MyAPIClient # get_current_user y MyAPIClient # get_message . Mi pregunta es cómo debo anotar esta mapping_class en el ObjectMapper #__ init__ que actualmente está marcado como “???” en la muestra anterior.

La clase en sí es llamable , que devuelve la instancia de esa clase. La solución puede ser:

 mapping_class: Callable[..., MyResponse]