【发布时间】:2020-05-28 20:35:32
【问题描述】:
假设我有一个以类型为参数并返回该类型实例的函数:
def fun(t):
return t(42)
然后我可以调用它并获取提供类型的对象:
fun(int) # 42
fun(float) # 42.0
fun(complex) # (42+0j)
fun(str) # "42"
fun(MyCustomType) # something
该列表并不详尽,我希望能够使用具有适当构造函数的任何类型。
然后,我想为该函数添加类型提示。该函数返回值的类型提示应该是什么?
我试过using simply t,因为t是一种类型:
def fun(t: type) -> t:
return t(42)
但这不起作用:
main.py:1:错误:未定义名称“t”
This answer 建议using a TypeVar:
from typing import TypeVar
T = TypeVar("T")
def fun(t: T) -> T:
return t(42)
但这似乎不对,因为T 表示一个类型,所以它表明返回的是类型本身,而不是它的实例。 Mypy 拒绝它:
main.py:6: 错误:“对象”不可调用
Using Any 明明有效,但我觉得太模糊了,没有传达意图:
from typing import Any
def fun(t: type) -> Any:
return t(42)
【问题讨论】:
标签: python python-3.x type-hinting