Python 3.11中修改对象属性为何会改变类变量的值?
类变量意外修改导致输出不符预期
你的代码运行后实际输出是9和9,但预期结果应该是9和8——这说明类变量被意外修改,所有实例共享了修改后的值,和预期逻辑不符。
问题根源
你应该是在修改属性时直接操作了类变量,而不是实例自身的属性。类变量属于整个类,是所有实例共享的,一旦修改,所有没定义独立实例属性的对象都会读取到这个修改后的值。
典型错误代码示例:
class MyClass: value = 8 def set_value(self, new_val): MyClass.value = new_val # 直接修改类变量,所有实例共用 obj1 = MyClass() obj1.set_value(9) print(obj1.value) # 输出9 obj2 = MyClass() print(obj2.value) # 实际输出9,不是预期的8
解决办法
如果需要每个实例拥有独立的属性值,要在方法里操作实例变量,用self.属性名来赋值或修改:
class MyClass: value = 8 # 类变量作为默认初始值 def set_value(self, new_val): self.value = new_val # 给当前实例创建专属属性 obj1 = MyClass() obj1.set_value(9) print(obj1.value) # 输出9 obj2 = MyClass() print(obj2.value) # 输出8,符合预期
修改后,每个实例都会拥有自己的value属性,互不干扰;类变量的默认值只会在实例未定义自身属性时才会被调用。
内容的提问来源于stack exchange,提问作者Mohan Sai0007
相关产品推荐
相关产品推荐

