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
来处理 +=
和其他变异方法,而不是返回新值。
我一直在寻找下一个答案,但可以肯定的是,我一直在寻找错误的关键字。 我以前用 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
来处理 +=
和其他变异方法,而不是返回新值。