2017/1/19
详见代码, Python中, 是否有「所有实例共享的值」这种东西?
定义类
In [1]: class C(object):
...: CLASS_VALUE = 1
...:
In [2]: c1 = C()
In [3]: c2 = C()
In [4]: c1.CLASS_VALUE, c2.CLASS_VALUE
Out[4]: (1, 1)
In [5]: c2.CLASS_VALUE = 2
In [6]: c1.CLASS_VALUE, c2.CLASS_VALUE
Out[6]: (1, 2)
产品版本:Python2.7.x
操作系统: Linux
题主通过c2.CLASS_VALUE = 2赋值的时候实际上是动态的给实例对象c2增加了CLASS_VALUE这个实例属性
所以打印c2.CLASS_VALUE的时候会访问到刚刚动态创建的实例属性。通过打印__dict__就可以看到
而类属性没有改变,通过c1.__class__.CLASS_VALUE还是c2.__class__.CLASS_VALUE都是一样的。想改变类属性的值可以通过类来改变C.CLASS_VALUE = value
Python3
雷雷__class__
可以借助一个辅助单例模式的类
然后所有的Myclass实例共享一个attr,就有类似的效果。
类的属性是所有类实例共享的
类实例修改类属性,会发生"copy on write"