Python@property属性报错AttributeError:_changed属性不存在求助
问题分析与解决
你的代码核心错误是类的构造函数名写错了:把初始化对象的特殊方法__init__写成了__int__。
Python中,__int__是用于将对象转换为整数的特殊方法,根本不会在实例化对象时执行。所以你写的初始化逻辑(给_changed、_name、_description赋值)完全没生效,实例化my_object后,这些属性根本不存在,第一次访问test_object.changed时就抛出了属性不存在的错误。
修正后的代码
class my_object: @property def changed(self): return self._changed @property def name(self): return self._name @name.setter def name(self, name_string: str = ""): self._changed = True self._name = name_string @property def description(self): return self._description @description.setter def description(self, description_string: str = ""): self._changed = True self._description = description_string # 修正构造函数名称为__init__ def __init__(self, *args, **kwargs): self._changed = False self._name = "" self._description = "" test_object = my_object() print("CHANGED ", test_object.changed) print("NAME ", test_object.name) print("DESCRIPTION ", test_object.description) test_object.name = "John Doe" test_object.description = "This is John's object" print("CHANGED ", test_object.changed) print("NAME ", test_object.name) print("DESCRIPTION ", test_object.description)
运行结果
修正后执行脚本,会输出:
CHANGED False NAME DESCRIPTION CHANGED True NAME John Doe DESCRIPTION This is John's object
额外建议
按照Python的PEP8编码规范,类名应该使用大驼峰命名法,比如把my_object改成MyObject,这样代码可读性更好,这属于风格问题,不影响功能实现。
内容的提问来源于stack exchange,提问作者Cromwell1963
相关产品推荐
相关产品推荐

