Python类无值属性访问触发AttributeError的原因咨询
Python类属性注解与类属性的区别解析
类中的
a: str只是类型注解,它仅用于给类型检查工具(比如mypy)提供类型提示,Python解释器不会为它创建实际的类属性或实例属性,也不会分配内存空间。所以不管访问类本身的A.a,还是实例的A().a,都会因为属性根本不存在而抛出AttributeError。而
a: str = 'attribute a'是带类型注解的类属性定义——这里除了标注类型,还实际完成了类属性的创建和赋值操作。此时A.a是真实存在的类属性,实例如果没有自己定义同名的a属性,访问A().a时会自动继承类的这个属性值。
举个直观的代码对比:
# 仅类型注解的情况 class A: a: str # 以下两行都会触发 AttributeError # print(A.a) # print(A().a) # 带注解的类属性定义 class B: a: str = 'attribute a' print(B.a) # 正常输出: attribute a print(B().a) # 正常输出: attribute a
如果想让仅写了类型注解的属性在实例中可用,需要在__init__方法里初始化实例属性:
class A: a: str def __init__(self): self.a = "初始值" print(A().a) # 正常输出: 初始值
内容的提问来源于stack exchange,提问作者nosahama
相关产品推荐
相关产品推荐

