假设我有一个函数,它以类型作为参数,并返回该类型的实例:
但这似乎不正确,因为
使用
def fun(t):
return t(42)
那么我就可以调用它并获取所提供类型的对象:
fun(int) # 42
fun(float) # 42.0
fun(complex) # (42+0j)
fun(str) # "42"
fun(MyCustomType) # something
这个列表并不详尽,我希望能够使用任何具有适当构造函数的类型。
然后,我想为该函数添加类型提示。该函数返回值的类型提示应该是什么?
我尝试过简单地使用t
,因为t
是一种类型:
def fun(t: type) -> t:
return t(42)
但这并不起作用:
main.py:1: 错误:名称“t”未定义
这个答案 建议 使用 TypeVar
:
from typing import TypeVar
T = TypeVar("T")
def fun(t: T) -> T:
return t(42)
但这似乎不正确,因为
T
表示一种类型,所以它表明返回的是类型本身,而不是它的实例。Mypy拒绝了它:
main.py:6: error: "object" not callable
使用
Any
显然可以工作,但我觉得它太模糊了,不能传达意图: (链接)
from typing import Any
def fun(t: type) -> Any:
return t(42)
fun
是一个函数,并且返回值是“自定义类”,您可能希望将该类定义为通用类,并像Fun[Union[int, float]]()
这样调用它。 - user202729"object" not callable
是因为您将_instance_t
作为函数使用。相反,您应该写成return type(t)(42)
。否则,代码是正确的。语法-> T
表示函数返回类型为T
的_value_。 - undefined