You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:20:50