类型注释对 class 成员的意外影响
Unexpected effect of type annotation on class members
class X:
a: str
X.a
和 X().a
都给出 AttributeError
。没有类型注释的定义 : str
给出 NameError
。 python 是如何解释 a: str
的? fastapi docs 中的真实示例(查找 name: str
)。
注释一个未初始化的变量很好,但它所做的只是在 class X
中创建一个 __annotations__
字典,并向其中添加一个记录注释的条目:X.__annotations__
变为 {'a': str}
。这本身不会创建可以引用的 class X
的属性,因为没有对应于 a
.
的值
class X:
a: str
X.a
和 X().a
都给出 AttributeError
。没有类型注释的定义 : str
给出 NameError
。 python 是如何解释 a: str
的? fastapi docs 中的真实示例(查找 name: str
)。
注释一个未初始化的变量很好,但它所做的只是在 class X
中创建一个 __annotations__
字典,并向其中添加一个记录注释的条目:X.__annotations__
变为 {'a': str}
。这本身不会创建可以引用的 class X
的属性,因为没有对应于 a
.