如何定义接受类型参数的 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 类型,类型参数为 intstr ,这反过来意味着它应该是 intstr.

但是,我不明白的是有关定义和使用 类 的正式 Python 语言规则以及方括号中的类型参数。

谁能解释一下?

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

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