Python-在不同类的不同实例之间共享变量
我一直在寻找下一个答案,但肯定我一直在搜索错误的关键字。 我以前用C++开发,把指针作为对象之间的引用。情况是,现在我尝试用Python构建一个程序,其中一个类“General”的实例使用相同的共享变量初始化一个类“Specific”的不同实例Python-在不同类的不同实例之间共享变量,python,pass-by-reference,Python,Pass By Reference,我一直在寻找下一个答案,但肯定我一直在搜索错误的关键字。 我以前用C++开发,把指针作为对象之间的引用。情况是,现在我尝试用Python构建一个程序,其中一个类“General”的实例使用相同的共享变量初始化一个类“Specific”的不同实例 class General(): def __init__(self): self._shared_variable = 0 self._specific1 = Specific(self._shared_vari
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\u variable'
,所以当一个“特定”实例修改其内部变量时,这个更改会被另一个实例看到或镜像。但python中并非如此。因此,每个特定实例都有自己的变量。如何实现这一点?在Python中不能引用变量。变量只是某个名称空间(通常是模块、类或实例对象的\uuuuu dict\uuuu
,或函数调用框架内的特殊本地名称空间)中的值的名称
可以引用值,但数字当然是不可变的值,因此不能将数字1更改为数字2
所以,你能做的就是创建一个可变的值来保存这个数字,并共享对它的引用
一种明显的可能性是只给每个
特定的
实例一个对创建它的常规
实例的引用:
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
类,该类保存int
,代理非变异方法,添加set
方法替换它,并通过调用set
并返回self
,而不是返回新值来处理+=
和其他变异方法。Hi@谢谢你的快速回答。我采用了第三种方法,效果很好!。你认为最好的做法是什么?谢谢大家!@这真的取决于你在做什么。就我个人而言,我很少使用像“int-holder”这样不太具体的东西,比如“user-object”(它碰巧没有字段,只有一个int-user-id),但这并不意味着它没有很好的用途。只要你考虑“如何在Python中建模数据”的术语而不是“如何将这个C++模型转换为Python模型”,你的直觉可能会很好。