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

标签 python python-typing

如何使用 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/

相关文章:

python - 如何使用封闭类的类型键入提示方法?

python - 泛型、类和实例

python - FastAPI 和 Pydantic 的正确类型工厂

python - Mypy 错误 "Need more than 2 values to unpack (3 expected)"尽管使用了不同元组的并集

python - 一种为类型检查目的子类化 NamedTuple 的方法

python - 如何在 PyQt5 中在屏幕上移动一个点?

python - 我如何查看 3 个不同的列以将一个公共(public)数字与另一个数据框的一列匹配以合并数据(如果没有匹配追加)?

python - 不可变对象(immutable对象)的内存分配

python - 根据调整其他列的权重创建新列

Python 套接字发送缓冲区与。强度