У меня есть функция в python, которая возвращает класс вместо экземпляра. Как указать, что возвращаемое значение является подклассом определенного типа?Проверка типа возвращаемого класса PEP 484
В следующем примере я установить возвращаемое значение как тип, но я хотел бы также указать, что тип имеет все атрибуты BaseClass:
from typing import Dict, Any
def class_constructor(name: str, attrs: Dict[str, Any]) -> type
ConstructedClass = type(name, (BaseClass,), attrs)
return ConstructedClass
class BaseClass: ...
Я не могу сказать (...) -> BaseClass, поскольку это указывает на экземпляр BaseClass, а не на BaseClass.
Чтобы ответить на мой вопрос, это выглядит как python/typing issue #107. На данный момент, лучшим решением является:
from typing import Dict, Any
class BaseClass: ...
def class_constructor(name: str, attrs: Dict[str, Any]) -> Callable[Any, BaseClass]
ConstructedClass = type(name, (BaseClass,), attrs)
return ConstructedClass
Если вы знаете __init__
подпись, вы можете использовать, что вместо Any
в Callable[Any, ...]
.
Когда поддержка Type[T]
добавляют раствор будет:
from typing import Dict, Any
class BaseClass: ...
def class_constructor(name: str, attrs: Dict[str, Any]) -> Type[BaseClass]
ConstructedClass = type(name, (BaseClass,), attrs)
return ConstructedClass
Можете ли вы представить конкретный, управляемый пример, который не может делать то, что вы хотите? – chepner
Добавлена поддержка 'Type [T]', как в mypy, так и в PEP 484. – max