【发布时间】:2016-08-03 14:48:44
【问题描述】:
我在 python 中有一个函数,它返回一个类而不是一个实例。如何指示返回值是特定类型的子类?
在下面的示例中,我将返回值设置为类型,但我想进一步指出该类型具有 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__ 签名,则可以在Callable[Any, ...] 中使用它来代替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
【问题讨论】:
-
您能否提供一个具体的、可运行的示例,但该示例无法满足您的要求?
-
在 mypy 和 PEP 484 中都添加了对
Type[T]的支持。
标签: python typing type-hinting