为何修改实例d1的类变量breed后,其他实例的该变量值未变化?
Python类变量修改后实例未同步的原因
原代码
class Dog: breed='German' def __init__(self,name,age): self.name=name self.age=age d1=Dog('fluffy',10) d2=Dog('pookie',5) d1.breed='Pitbull' print(d1.breed) print(d2.breed)
输出结果
Pitbull German
原因解析
你这里犯了一个常见误区:用d1.breed='Pitbull'的操作并没有修改类变量,而是给实例d1新增了一个同名的实例变量。
Python中,当通过实例访问属性时,会先在实例自己的属性字典里查找,找不到才会去类的属性字典里读取类变量。给d1赋值breed后,d1.breed读取的是自身的实例变量,而类本身的breed变量完全没被改动,d2访问时还是会读取类里原本的German值。
正确修改类变量的方式
如果要让所有实例同步类变量的修改,必须通过类本身来赋值,而非实例:
class Dog: breed='German' def __init__(self,name,age): self.name=name self.age=age d1=Dog('fluffy',10) d2=Dog('pookie',5) Dog.breed='Pitbull' # 直接修改类的变量 print(d1.breed) print(d2.breed)
此时输出会是:
Pitbull Pitbull
内容的提问来源于stack exchange,提问作者Shiva Gupta
相关产品推荐
相关产品推荐

