Python类中如何访问更新后的属性?解决ab属性未同步问题
问题:更新属性a后如何让ab自动输出最新拼接结果?
原代码实现
class test: def __init__(self): self._a = "Thisa" self.b = "Thisb" self.ab = self.a + self.b @property def a(self): return self._a @a.setter def a(self, value): self._a = value
测试过程及问题
>>> from test import * >>> boo = test() >>> print(boo.a) Thisa >>> print(boo.b) Thisb >>> print(boo.ab) ThisaThisb >>> boo.a = "baa" >>> print(boo.ab) ThisaThisb
问题原因
ab是在类实例化时(__init__方法中)仅计算一次并赋值的属性,后续修改a的取值时,ab不会自动重新计算拼接结果,所以输出还是初始的拼接值。
解决方案
方案一:将ab定义为@property属性
把ab改成动态计算的属性,每次访问时都会重新拼接a和b的当前值:
class test: def __init__(self): self._a = "Thisa" self.b = "Thisb" @property def a(self): return self._a @a.setter def a(self, value): self._a = value @property def ab(self): return self.a + self.b
测试时,修改a后访问ab会得到最新结果:
>>> boo.a = "baa" >>> print(boo.ab) baaThisb
方案二:在a的setter中更新ab的值
如果希望ab是一个存储属性而非动态计算属性,可以在a的setter方法里主动更新ab:
class test: def __init__(self): self._a = "Thisa" self.b = "Thisb" self.ab = self.a + self.b @property def a(self): return self._a @a.setter def a(self, value): self._a = value # 更新a时同步更新ab self.ab = self.a + self.b
同样能实现修改a后ab自动更新的效果。
内容的提问来源于stack exchange,提问作者Flood
相关产品推荐
相关产品推荐

