Python 共享给其他实例的类中的全局变量

Python 共享给其他实例的类中的全局变量,python,python-3.x,global-variables,Python,Python 3.x,Global Variables,我需要解释下面的代码 class Test(): a_variable = [] def add(self, value): self.a_variable.append(value) def print(self): print(self.a_variable) a = Test() b = Test() a.add(1) b.print() 输出 [1] 问题: 这正常吗 为什么a_变量共享给其他实例 有关于这方面的文件吗

我需要解释下面的代码

class Test():
    a_variable = []

    def add(self, value):
        self.a_variable.append(value)

    def print(self):
        print(self.a_variable)

a = Test()
b = Test()

a.add(1)
b.print()
输出

[1]
问题:

  • 这正常吗
  • 为什么
    a_变量
    共享给其他实例
  • 有关于这方面的文件吗

  • 注意:我在我的环境中使用的是python 3.7.4,运行在Windows 10上

    通常,当您尝试使用实例设置类属性时,您会创建一个对象属性,该对象属性会遮挡该类属性。例如,如果您执行以下操作:

    def add(self, value):
        self.a_variable = value
    
    您最终将得到:

    a.print()
    将打印
    1

    b.print()
    将打印
    []


    通过使用
    .append()。这就是为什么它会反映到类的所有实例。

    它是一个类属性。类属性可以通过
    self
    检索,但不能设置。它们在类的所有实例中共享。这里的技巧是class属性的可变性。请注意,OP并不是直接设置它。@Selcuk更确切地说,它是变异的,而不是可变的。@klauds。很公平,但如果它不可变,就不能对它进行变异。是否有关于此的文档?对于文档-