【python天坑记录】定义了类属性,却在类实例化时报错“找不到属性”

示例如下,我在类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 = 123

    def get_aaa(self):
        return self._aaa

    def set_aaa(self, value):
        self._aaa = value

    aaa = property(get_aaa, set_aaa)

CCC()

出现这个报错的原因是get_aaa()的返回值是self._aaa,而self._aaa尚未被定义!当python尝试获取aaa的值却获取不到时,就会报错类属性aaa不存在。
如果把代码改成这样就没问题了:

class CCC:
    def __init__(self):
        self._aaa = 123
        print(self.aaa)   ####在self._aaa定义后调用self.aaa###

    def get_aaa(self):
        return self._aaa

    def set_aaa(self, value):
        self._aaa = value

    aaa = property(get_aaa, set_aaa)

CCC()

我在改一坨屎山代码时遇到了这个问题,困扰了我两三天,在网上也没找到相关的解决方法,特此记录。

posted @ 2025-02-04 23:23  遥遥白草  阅读(109)  评论(0)    收藏  举报