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'}
修改类属性需要使用类名,而不是实例名。避免在实例中误修改了类属性