类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)
字符串
上面的代码可以工作,但是类型检查器(在我的例子中是PyCharm)会发现t
的类型应该是Thing[int]
而不是Thing[str]
。这一切都很好,但是我如何让类Thing
支持任意数量的类型参数,就像Tuple
一样?
2条答案
按热度按时间7gcisfzg1#
就像@metatoaster在他们的评论中所说的那样,这可以使用
TypeVarTuple
,从3.11开始在typing
中可用,否则typing_extensions
:字符串
inkz8wg92#
t
的类型是Thing
,而不是Thing[str]
。所以这个对象接受T
的任何东西。t2 = Thing[str]("WTF")
t3=Thing[Union[str,int,float]]("WTF")
顺便说一下,您可以使用来自typing_inspect的get_generic_type()检查泛型的类型
字符串