实例变量对于每个实例都是唯一的,而类变量由所有实例共享。
class C: x = 2 # 类变量 def __init__(self, y): self.y= y # 实例变量 C.x # 2 C.y # AttributeError:类型对象“ C”没有属性“ y” c1 = C(3) c1.x # 2 c1.y # 3 c2 = C(4) c2.x # 2 c2.y # 4
可以在此类的实例上访问类变量,但将其分配给class属性将创建一个实例变量,该实例变量遮盖了该类变量
c2.x = 4 c2.x # 4 C.x # 2
需要注意的是变异的情况下,类变量可能会导致一些意想不到的后果。
class D: x = [] def __init__(self, item): self.x.append(item) # 请注意,这不是伪装! d1 = D(1) d2 = D(2) d1.x # [1,2] d2.x # [1,2] D.x # [1,2]