
在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 操作发生在同一个实例上。这是面向对象编程中状态管理的基础原则。
立即学习“Python免费学习笔记(深入)”;










