Python类和实例变量

示例

实例变量对于每个实例都是唯一的,而类变量由所有实例共享。

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]