如何使用 python 通用类型类的构造函数?
T = typing.TypeVar('T')
class MyClass(typing.Generic[T]):
def __init__(self, initialValue: typing.Iterable):
self.values: T = T(initialValue)
test = MyClass[tuple[int]]([1, 2, 3])
在这种情况下,我期望 T(initialValue)
等同于 tuple(initialValue)
但我得到了一个错误。 “发生异常:TypeError
“TypeVar”对象不可调用”
我想这并不奇怪,因为这不是打字的目的,但是否有解决方法来实现这一点?
最佳答案
您需要采用显式工厂方法。类型注释仅用于编译时目的,而在运行时 T
只是 TypeVar
。考虑
class MyClass(Generic[T]):
def __init__(self, initialValue: Iterable[int], factory: Callable[[Iterable[int]], T]):
self.values: T = factory(initialValue)
然后称它为
test = MyClass([1, 2, 3], lambda x: tuple(x))
注意:将 tuple
作为第二个参数传递会很好,但是 mypy
在将该类型名转换为可调用
。其他类型检查器也许能够处理它;您的里程可能会有所不同。
关于python - 如何使用泛型类型的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71113281/