2017-02-27 73 views
0

我想在python中为两个实例使用一个变量。 当实例更新变量时,它也会在其他实例中更新。Python多实例使用相同的变量

我的变量TASK_ID:

class Task(object):  # pragma: no cover 

    def run_deploy(self, args, **kwargs): 
     # atexit.register(atexit_handler) 
     self.task_id = kwargs.get('task_id', str(uuid.uuid4())) 

    def start_benchmark(self, args, **kwargs): 
     """Start a benchmark scenario.""" 
     atexit.register(atexit_handler) 

     self.task_id = kwargs.get('task_id', str(uuid.uuid4())) 

但是当我运行代码,我检测TASK_ID有不同的价值,我想他们有相同的值。

请让我知道如何去做。 谢谢!

+0

检查是否有帮助[Static Vatiables](http://stackoverflow.com/questions/68645/static-class-variables-in-python) – Confused

+0

要了解Python中会发生什么以及如何工作,请参阅https ://nedbatchelder.com/text/names1.html –

+0

你可以把一些代码,所以我可以看到你想要发生的事情吗? –

回答

3

在Python引用对象是微不足道的。下面是使用一个类的实例一个简单的例子:

class cl: 
    var1 = 0 
    def __init__(self, var2): 
    self.var2 = var2 

让我们看一下这个类的两个实例,以及它们是如何更新:

>>> x = cl(1) # 
>>> y=x 
>>> print(y.var2) 
1 
>>> y.var2 = 2 
>>> print(x.var2) 
2 

而现在到了关键部分:

>>> x is y 
True 

不要忘了ìs==不一样。

对于两个实例,var1也是如此。

1

在python中,一切都是参考。 A 变量仅仅是您提供给对象引用的名称。你可以给很多名称引用同一个对象。

这几乎是python的工作原理,它正是你在这里需要的。

例如为:

a = [] # a reference to an empty list, named "a" 
b = a # a reference to the same empty list, named "b" 
a.append(5) # modify, through the "a" reference 
print(b) # "b" still refers to the same list, which is not empty now 
=> [5]