Ray*_*Ray 5 types typing variadic python-3.x
该类typing.Tuple可以与任意数量的类型参数一起使用,例如Tuple[int, str, MyClass]或Tuple[str, float]。我如何实现我自己的可以像这样使用的类?我了解如何继承typing.Generic. 下面的代码演示了这一点。
from typing import TypeVar, Generic
T = TypeVar("T")
class Thing(Generic[T]):
def __init__(self, value: T):
self.value = value
def f(thing: Thing[int]):
print(thing.value)
if __name__ == '__main__':
t = Thing("WTF")
f(t)
Run Code Online (Sandbox Code Playgroud)
t上面的代码可以工作,但是类型检查器(在我的例子中是 PyCharm)会捕获应该是类型Thing[int]而不是 的事实Thing[str]。这一切都很好,但是如何让该类Thing支持任意数量的类型参数,就像Tuple那样?
bct*_*bct -4
t是 类型Thing,而不是Thing[str]。所以这个对象接受任何 的东西T。t2 = Thing[str]("WTF")t3=Thing[Union[str,int,float]]("WTF")顺便说一下,您可以通过使用typing_inspect中的get_generic_type()来检查泛型的类型
>>> get_generic_type(t)
__main__.Thing
>>> get_generic_type(t2)
__main__.Thing[str]
>>> get_generic_type(t3)
__main__.Thing[typing.Union[str, int, float]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |