假设我有将类型作为参数并返回该类型实例的函数:
def fun(t):
return t(42)
Run Code Online (Sandbox Code Playgroud)
然后我可以调用它并获取所提供类型的对象:
fun(int) # 42
fun(float) # 42.0
fun(complex) # (42+0j)
fun(str) # "42"
fun(MyCustomType) # something
Run Code Online (Sandbox Code Playgroud)
该列表并不详尽,我希望能够使用具有适当构造函数的任何类型。
然后,我想为该函数添加类型提示。该函数的返回值的类型提示应该是什么?
我试过使用 simplet,因为t是一种类型:
def fun(t: type) -> t:
return t(42)
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
main.py:1: 错误:未定义名称“t”
from typing import TypeVar
T = TypeVar("T")
def fun(t: T) -> T:
return t(42)
Run Code Online (Sandbox Code Playgroud)
但这似乎不正确, asT表示一种类型,因此它表明返回的是类型本身,而不是其实例。Mypy 拒绝它:
main.py:6: 错误:“对象”不可调用
使用Any明显的工作,但我觉得它太模糊了,它没有传达意图:
from typing import Any
def fun(t: type) -> Any:
return t(42)
Run Code Online (Sandbox Code Playgroud) 我想输入提示以下函数:
def get_obj_class(self) -> *class*:
return self.o.__class__
Run Code Online (Sandbox Code Playgroud)
self.o 可以是任何类型,它是在运行时确定的.
*class*显然不是这里的答案,因为它是无效的语法.但是,什么是正确的答案?我找不到任何关于此的文档,任何帮助表示赞赏.
在类似的说明中,如果我有一个f(cls: *class*)返回实例的函数cls,有没有办法键入提示返回值?