如何定义接受类型参数的Python类

时间:2018-03-08 16:18:26

标签: python python-3.x type-parameter

Python 3.5引入了类型提示,允许用户编写以下内容:

from typing import Union

answer: Union[int, str] = 42
answer = '42'

文档:https://docs.python.org/3/library/typing.html#typing.Union

我想我理解上面代码的天真含义。特别是,这意味着变量answer已被赋予类型提示,该类型提示它应该是Union类型,其类型参数为intstr ,这反过来意味着它应该是intstr

然而,我不理解的是关于在方括号中定义和使用类型参数的类的正式Python语言规则。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

与方括号的任何其他使用一样,Union[int, str]Union.__getitem__((int, str))实施。在这种情况下,Union是定义_Union的类__getitem__的实例。你真的不需要知道这些细节来使用这个课程。

答案 1 :(得分:1)

您使用[]的地方正在调用__getitem__方法。 Union类型的元类具有__getitem__方法。当您致电Union[int, str]时,您正在调用传递元组的__getitem__方法,其中包含intstr。您可以在Python库的typing.py文件中看到这一点。