Python报错AttributeError: 'bool'对象无'setter'属性的问题求助
解决AttributeError: 'bool' object has no attribute 'setter'问题
错误原因
你代码里的@w.setter写法完全错误——w是全局布尔变量,不是类中定义的property属性。类的setter装饰器必须和前面定义的property方法名对应,也就是要用@is_w.setter,而非@w.setter。另外,你直接修改全局变量w = True的操作会绕过类的property逻辑,根本触发不了listen()方法。
修正后的代码
w = False class A(object): @property def is_w(self): global w return w @is_w.setter # 改为对应property的方法名is_w def is_w(self, value): global w w = value self.listen(value) def listen(self, w_): if w_: print("worked!") self.is_w = False # 通过property重置,保持逻辑统一 def value_change(self): self.is_w = True # 通过类属性设置,触发setter逻辑
测试示例
a = A() a.value_change() # 会打印"worked!",同时w被自动重置为False
关键注意点
- 类的property setter装饰器必须和对应的property方法同名,不能用全局变量名
- 所有需要触发监听逻辑的变量修改操作,都要通过类实例的
is_w属性完成,不能直接操作全局变量w,否则不会执行listen()方法
内容的提问来源于stack exchange,提问作者Mo .haytham
相关产品推荐
相关产品推荐

