如何声明类型提示以指示函数返回作为参数传递的类引用的实例?
声明如下似乎不对,因为它表明返回的类型与参数的类型相同:
from typing import TypeVar
T = TypeVar('T')
def my_factory(some_class: T) -> T:
instance_of_some_class = some_class()
return instance_of_some_class
使用示例:
class MyClass:
pass
my_class = my_factory(MyClass) # Inferred type should be MyClass
答案 0 :(得分:5)
根据PEP-484,正确的方法是使用Type[T]
作为参数:
from typing import TypeVar, Type
T = TypeVar('T')
def my_factory(some_class: Type[T]) -> T:
instance_of_some_class = some_class()
return instance_of_some_class
然而,我的编辑似乎还没有支持这一点。
答案 1 :(得分:0)
我试着玩:
class my_factory(Generic[T]):
def __call__(self) -> T:
return T()
旨在能够写作
a_string = my_factory[str]()
但无法正常工作。
我实际上要解决的问题是在创建泛型时,例如我想做的事情:
class queue_factory(Generic[T]):
def __call__(self, size: int) -> Queue[T]:
return Queue[T](size)
q = queue_factory[str](10)
也许比我自己更熟练的人可以更进一步并使其起作用。我失败了,而是做了:
def queue_factory(self, element_type: Type[T], size: int) -> Queue[T]:
return Queue[T](size)
q = queue_factory(str, 10)
请注意,element_type
参数没有使用,在运行时会被忽略,它仅用于类型检查。