gpt4 book ai didi

python-3.x - Python 3 类型,具有任意数量包含类型的自定义可变参数泛型类型,如何?

转载 作者:行者123 更新时间:2023-12-04 23:41:03 24 4
gpt4 key购买 nike

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 那样?

最佳答案

  • 在您的示例中, t 的类型为 Thing ,而不是 Thing[str] 。所以这个对象接受 T 的任何东西。
  • 您可以像这样对其进行参数化:t2 = Thing[str]("WTF")
  • 现在,对于你的问题,我想你想像这样使用 typing.Union: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]]

    关于python-3.x - Python 3 类型,具有任意数量包含类型的自定义可变参数泛型类型,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46487583/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com