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。很公平,但如果它不可变,就不能对它进行变异。是否有关于此的文档?对于文档-