Python - 在不同 类 的不同实例之间共享变量

Python - Sharing variables between different instances of different classes

我一直在寻找下一个答案,但可以肯定的是,我一直在寻找错误的关键字。 我以前用 C++ 开发,在对象之间传递指针作为引用。情况是,现在我正在尝试在 Python 中构建一个程序,其中 class 'General' 的一个实例初始化 class 'Specific' 的不同实例相同的共享变量。

class General():
    def __init__(self):
        self._shared_variable = 0
        self._specific1 = Specific(self._shared_variable)
        self._specific2 = Specific(self._shared_variable)

class Specific():
    def __init__(self, shared):
        self._shared = shared
    def modify_shared_variable(self):
        self._shared_variable +=1

所以我想做的是在 de General 范围内共享此 'shared_variable',因此当 'Specific' 实例修改其内部变量时,此更改会被另一个实例看到或镜像.但在python中却不是这样。因此,每个特定实例都有自己的变量。我怎样才能做到这一点?

您不能引用 Python 中的变量。变量只是一个名称,在某些名称空间(通常是模块的 __dict__,class 或实例对象,或函数调用框架内的特殊本地名称空间)中,用于值。

您可以引用,但数字当然是不可变的值,因此您不能将数字 1 更改为数字 2。

所以,您可以做的是创建某种可变值来保存数字,并共享对 that.

的引用

一个明显的可能性是给每个 Specific 实例一个对创建它的 General 实例的引用:

class General():
    def __init__(self):
        self._shared_variable = 0
        self._specific1 = Specific(self)
        self._specific2 = Specific(self)

class Specific():
    def __init__(self, shared_general):
        self._shared_general = shared_general
    def modify_shared_variable(self):
        self._shared_general._shared_variable +=1

另一种可能是存储单元素列表:

class General():
    def __init__(self):
        self._shared_variable = [0]
        self._specific1 = Specific(self._shared_variable)
        self._specific2 = Specific(self._shared_variable)

class Specific():
    def __init__(self, shared):
        self._shared = shared
    def modify_shared_variable(self):
        self._shared[0] += 1

(这实际上与您在 C++ 中所做的相同,但数组和指针的语法糖几乎是相同的……)


或者您可以创建一个简单的 MutableInteger class 来保存 int,代理非变异方法,添加 set 方法来替换它,并通过调用 set 并返回 self 来处理 += 和其他变异方法,而不是返回新值。