这个问题已经在这里有了答案 :
Python:如何在不同类的实例之间共享数据? (1个答案)
2年前关闭。
我一直在寻找下一个答案,但可以肯定的是,我一直在寻找错误的关键词。我以前使用C
++开发,在对象之间传递指针作为引用。情况是,现在我正在尝试在Python中构建程序,其中类“常规”的一个实例使用相同的共享变量初始化类“特定”的不同实例。
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
因此,我想做的事是'shared_variable'
在de
General范围内共享的,因此,当“特定”实例修改其内部变量时,此更改将被另一个实例看到或镜像。但这不是python中的情况。因此,每个特定实例都有其自己的变量。我该如何实现?
您不能在Python中引用变量。变量只是某个名称空间(通常__dict__
是模块,类或实例对象的名称,或函数调用框架内的特殊本地名称空间)的名称。
您可以引用 值 ,但是数字当然是不可变的,因此您不能将数字1更改为数字2。
所以,你所能做的就是创造某种持有数量可变的值,并分享引用的 那个 。
一种明显的可能性是仅给每个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
类,该类包含一个int
,代理非变异方法,添加一个set
替代它的方法+=
以及通过调用set
和returnself
而不是返回新值来处理其他变异方法。
问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量
问题内容: 我一周前开始用python进行编码,这是我的错误,我很快就开始使用oops,类和对象进行编码。我以为我的C ++水平会有所帮助…。 令我惊讶的是,var和list都是一个全局变量,似乎在所有实例中都共享....我以为在所有实例中它都不同.....我花了半天的时间才弄清楚那....一点意义都没有,一个变量只能由一个类对象访问,而是在所有实例之间共享....只是好奇,它背后有原因吗???
问题内容: 我有以下问题。我编写了一个函数,该函数将列表作为输入并为列表中的每个元素创建一个字典。然后,我想将此字典追加到新列表中,以便获得字典列表。我正在尝试为此生成多个进程。我在这里的问题是,我希望不同的进程访问字典列表,因为它由其他进程更新,例如,一旦达到一定长度,就打印一些东西。 我的例子是这样的: 现在我的问题是每个过程都创建自己的过程。有没有一种方法可以在进程之间共享列表,以便所有字典
问题内容: 在Java中的各个类之间共享数据的最佳方法是什么?我有一堆变量,它们由不同的类以不同的方式在不同的文件中使用。让我尝试说明问题的简化版本: 这是我之前的代码: 现在看起来像这样: 所以无论如何,我应该每次都传递x和y(其中x,y是存储在辅助类func中的变量)吗? 我的想法是要有一个特殊的容器类,其中存放x和y。顶级类将具有容器类的实例,并使用set方法更改x,y。 我的帮助程序类还将
在 OpenResty 的体系中,可以通过共享内存的方式完成不同工作进程的数据共享,可以通过 Lua 模块方式完成单个进程内不同请求的数据共享。如何完成单个请求内不同阶段的数据共享呢?最典型的例子,估计就是在 log 阶段记录一些请求的特殊变量。 ngx.ctx 表就是为了解决这类问题而设计的。参考下面例子: location /test { rewrite_by_lua_block {
问题内容: 我需要不同的类加载器才能卸载类。但是我需要在它们之间共享对象(实际上我正在获得ClassCastException)。那么解决该问题的解决方案是什么?谢谢 问题答案: 来自不同类加载器的对象可以通过公共类加载器加载的接口和类彼此交互。
我需要使用BEHAT在不同类的步骤之间共享数据。类似于(在cucumber-jvm步骤之间传递变量的良好实践)PicoContainer for cucumber。有这样的框架吗?我知道我可以使用静态成员,但可能是一些框架。
搜索了很多关于testng行为的生动答案,直到现在才找到。。。 如果我运行我的测试/套件并行="方法"和我的一个测试有3个方法(@测试方法),其中3个共享相同的实例对象/实例变量(不是静态的!)。testng完全分离了方法,所以每个方法都可以看到共享方法的实例变量?我的意思是,testng将为每个方法创建一个单独的类实例并运行?