如何定义接受类型参数的 Python class
How to define a Python class which accepts type parameters
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 语言规则以及方括号中的类型参数。
谁能解释一下?
在您使用 []
的地方,它正在调用 __getitem__
方法。 Union
类型的元类有一个 __getitem__
方法。当您调用 Union[int, str]
时,您正在调用传递元组的 __getitem__
方法,其中包含 int
和 str
。您可以在 Python 库的 typing.py
文件中看到它。
与方括号的任何其他用法一样,Union[int, str]
由 Union.__getitem__((int, str))
实现。在这种情况下,Union
是 class _Union
的一个实例,它定义了 __getitem__
。你真的不需要知道这些细节来使用 class.
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 语言规则以及方括号中的类型参数。
谁能解释一下?
在您使用 []
的地方,它正在调用 __getitem__
方法。 Union
类型的元类有一个 __getitem__
方法。当您调用 Union[int, str]
时,您正在调用传递元组的 __getitem__
方法,其中包含 int
和 str
。您可以在 Python 库的 typing.py
文件中看到它。
与方括号的任何其他用法一样,Union[int, str]
由 Union.__getitem__((int, str))
实现。在这种情况下,Union
是 class _Union
的一个实例,它定义了 __getitem__
。你真的不需要知道这些细节来使用 class.