Python类中如何正确获取实例变量的最新值(而非初始值)?

在python中,若每次调用方法都创建新实例,将无法共享状态;必须复用同一实例对象,才能读取其属性的最新值。

你遇到的问题本质上是对象生命周期与实例状态隔离导致的:Example().input_value() 和 Example().return_value() 创建了两个完全独立的对象,它们各自拥有独立的 self.vr 属性。第一个实例将 vr 设为 'Hello',但随即被丢弃;第二个实例则使用默认初始化值 '',因此 return_value() 返回空字符串。

✅ 正确做法是:创建一次实例,复用该对象调用多个方法,确保所有操作作用于同一内存地址上的同一对象:

class Example:
    def __init__(self):
        self.vr = ''  # 初始值

    def input_value(self):
        self.vr = 'Hello'  # 修改当前实例的属性

    def return_value(self):
        return self.vr

# ✅ 正确:复用同一个实例
example = Example()
example.input_value()
cp = example.return_value()
print(cp)  # 输出: 'Hello'

⚠️ 注意事项:

  • 字符串的不可变性(str 是 immutable)在此场景中不是根本原因——问题出在对象未复用,而非字符串能否修改。即使换成 list 或 dict,若创建不同实例,同样无法跨实例共享数据。
  • 若误写 if __name__ == '__main__': 在类定义内部(如原代码所示),会导致语法错误;if __name__... 必须位于类外部、模块顶层。
  • 可通过 id(obj) 验证是否为同一实例:
    a = Example()
    b = Example()
    print(id(a) == id(b))  # False → 完全不同的对象

? 总结:Python 实例变量的值属于特定对象,而非类本身(除非是类变量)。要获取“最新值”,关键不是绕过字符串不可变性,而是确保 set 和 get 操作发生在同一个实例上。这是面向对象编程中状态管理的基础原则。