为什么 Class 变量没有更新其所有实例?

aze*_*ert 5 python oop instance class-variables

我正在学习课程,但不明白这一点:

class MyClass:
    var = 1

one = MyClass()
two = MyClass()

print(one.var, two.var) # out: 1 1
one.var = 2

print(one.var, two.var) # out: 2 1
Run Code Online (Sandbox Code Playgroud)

我认为类变量可以被所有实例访问,为什么类变量不更新其所有实例?

小智 4

对于所有这些变量来说,它都不会改变,因为这样做:one.var = 2会创建一个与类变量同名的新实例变量,但仅限于实例one。之后,one将首先找到它的实例变量并返回它,而two只会找到类变量并返回它。

要更改类变量,我建议两个选项:

  1. 创建一个类方法来更改类变量(我的偏好)

  2. 直接使用类来改变它

class MyClass:
    var = 1

    @classmethod
    def change_var(cls, var): 
        cls.var = var


one = MyClass()
two = MyClass()

print(one.var, two.var) # out: 1 1

one.change_var(2)  # option 1
print(one.var, two.var) # out: 2 2

MyClass.var = 3     # option 2
print(one.var, two.var) # out: 3 3
Run Code Online (Sandbox Code Playgroud)