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

问题描述 投票:2回答:1

我需要下面的代码解释

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]

问题:

  1. 正常吗?
  2. 为什么a_variable共享给其他实例?
  3. 是否有关于此的文档?

注意:我正在环境中使用python 3.7.4并在Windows 10上运行

python global-variables
1个回答
1
投票

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

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

您最终将得到:

[a.print()将打印1

[b.print()将打印[]

通过使用.append(),您获取对类属性(即Test.a_variable)的引用,并对其进行mutate。这就是为什么它会反映到类的所有实例。

© www.soinside.com 2019 - 2024. All rights reserved.