示例如下,我在类CCC
里定义了类属性aaa
,这个类属性采用property
装饰器,所以在获取self.aaa
时实际上在获取get_aaa()
的返回值。
但这段代码在CCC()
实例化的时候却报错:AttributeError: 'CCC' object has no attribute '_aaa'. Did you mean: 'aaa'?
class CCC:def __init__(self):print(self.aaa) ####此处调用类属性aaa###self._aaa = 123def get_aaa(self):return self._aaadef set_aaa(self, value):self._aaa = valueaaa = property(get_aaa, set_aaa)CCC()
出现这个报错的原因是get_aaa()
的返回值是self._aaa
,而self._aaa
尚未被定义!当python尝试获取aaa
的值却获取不到时,就会报错类属性aaa
不存在。
如果把代码改成这样就没问题了:
class CCC:def __init__(self):self._aaa = 123print(self.aaa) ####在self._aaa定义后调用self.aaa###def get_aaa(self):return self._aaadef set_aaa(self, value):self._aaa = valueaaa = property(get_aaa, set_aaa)CCC()
我在改一坨屎山代码时遇到了这个问题,困扰了我两三天,在网上也没找到相关的解决方法,特此记录。