使用 from __future__ import annotations 语句来允许在类型注释中使用尚未定义的类名
我们来看一个例子,先定义类C,定义其中的函数时,在类型注释中使用了尚未定义的类名D:
>>> class C:
... def some_method(self, b: D) -> None:
... print(f"A is interacting with {b}")
...
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 2, in C
NameError: name 'D' is not defined
>>> from __future__ import annotations
>>> class C:
... def some_method(self, b: D) -> None:
... print(f"A is interacting with {b}")
...
>>>
可以看到,第一次定义C的时候报错,说D没有定义。
然后输入 from __future__ import annotations之后,再定义C的时候,就没有报错了。
为了解决类型注释未定义这个问题,Python 3.7及以上版本引入了一个特殊的from __future__ import annotations
语句。这个语句的作用是改变Python解释器处理类型注解的方式,使得类型注解中的字符串在运行时被当作字符串处理,而不是在定义时立即求值。这允许你在类定义之前使用尚未定义的类名作为类型注解,因为此时这些类型注解仅仅是字符串,不会立即被解释器评估。