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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:50:51