用户工具


class C:
    a=1    #不可变对象,在实例中调用时不可改变
    b={}   #可变对象,实例调用时可以改变值

c=C()

print c.a  #查找实例c的__dict__中是否有属性a,如果没有则去类的__dict__中查找
c.a=2   #  查找实例c的__dict__中是否有属性a,如果没有则创建了一个实例属性(覆盖类属性)
c.b['name']='fang' # 查找实例c的__dict__中是否有属性b,如果没有则去类的__dict__中查找
                      最终这句话会改变类属性b
c.b='fang'         # 查找实例c的__dict__中是否有属性b,没有则创建实例属性b

print c.__dict__,C.__dict__
print c.a,C.a 
print c.b,C.b 


结果:
{'a': 2, 'b': 'fang'} {'a': 1, , 'b': {'name': 'fang'}}
2 1
fang {'name': 'fang'}

修改类属性需要使用类名,而不是实例名。避免在实例中误修改了类属性