2017-02-27 75 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]