如何使用泛型类型的构造函数

How to use constructor of Generic type

如何使用 python 通用类型 class 的构造函数?

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' 对象不可调用

我想这并不奇怪,因为这不是构建打字的目的,但是否有解决方法来实现这一点?

您需要采用显式工厂方法。类型注释仅用于 compile-time 目的,在运行时 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 在将该类型名称转换为 Callable。其他类型检查器也许能够处理它;您的里程可能会有所不同。