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
类型,其类型参数为int
和str
,这反过来意味着它应该是int
或str
。
然而,我不理解的是关于在方括号中定义和使用类型参数的类的正式Python语言规则。
有人可以解释一下吗?
答案 0 :(得分:3)
与方括号的任何其他使用一样,Union[int, str]
由Union.__getitem__((int, str))
实施。在这种情况下,Union
是定义_Union
的类__getitem__
的实例。你真的不需要知道这些细节来使用这个课程。
答案 1 :(得分:1)
您使用[]
的地方正在调用__getitem__
方法。 Union
类型的元类具有__getitem__
方法。当您致电Union[int, str]
时,您正在调用传递元组的__getitem__
方法,其中包含int
和str
。您可以在Python库的typing.py
文件中看到这一点。