起因:实例访问类属性,会创建一个独立的同名实例属性
class Demo:
class_attr = 0
def __init__(self):
self.__a = 'a'
self.self_attr = 'self_attr'
def set_self_attr(self, value):
self.class_attr = value
def get_self_attr(self):
return self.class_attr
@classmethod
def get_class_attr_(cls):
return cls.class_attr
@classmethod
def set_class_attr(cls, value):
cls.class_attr = value
a = Demo.class_attr
d1 = Demo()
d2 = Demo()
d2.set_self_attr(2)
Demo.class_attr = 1
通常不要使用实例去引用类属性 , 如果实例一定要使用某个属性或属性方法 , 可以另外定义一个实例属性
d1.get_self_attr()#d1是从类属性中获取的值
d2.get_self_attr()#d2是从实例属性中获取的值