类型注释对 class 成员的意外影响

Unexpected effect of type annotation on class members

class X:
    a: str

X.aX().a 都给出 AttributeError。没有类型注释的定义 : str 给出 NameError。 python 是如何解释 a: str 的? fastapi docs 中的真实示例(查找 name: str)。

注释一个未初始化的变量很好,但它所做的只是在 class X 中创建一个 __annotations__ 字典,并向其中添加一个记录注释的条目:X.__annotations__ 变为 {'a': str}。这本身不会创建可以引用的 class X 的属性,因为没有对应于 a.

的值