2016-12-25 81 views
1

我已經閱讀了創建一個靜態變量,我們可以在類定義中聲明它們,而不是在方法內聲明它們。但是從Java世界看來,它對我來說似乎並不「靜態」,因爲從一個實例更改變量的值會創建自己的與變量不同的變量。 我正在尋找一種方法來確保變量的值在不同實例間保持一致。 StackOverflow的答案之一提出了下面這段代碼,這對我來說似乎不太適用。在Python中維護實例中的靜態變量的公共值

class Test(object): 
_i = 3 
@property 
def i(self): 
    return self._i 
@i.setter 
def i(self,val): 
    self._i = val 


x1 = Test() 
x2 = Test() 
x1.i = 50 
assert x2.i == x1.i # The example suggested no error here but it doesn't work for me 

你可以用一個例子來解釋一下,如果可以做到這一點嗎?

+0

你似乎浪費你的時間,因爲沒有恆定的變量,並且在Python中有動態屬性你有沒有考慮過這個選項只是爲了不這樣做(重寫實例中的var)? –

回答

0
class Test(object): 
    _i = 3 

    @classmethod 
    def set_i(self, value): 
     self._i = value 

    def get_i(self): 
     return self._i 

    i = property(get_i, set_i) 

x1 = Test() 
x2 = Test() 
print(x1.i) # 3 
print(x2.i) # 3 

x1.set_i(50) 
print(x1.i) # 50 
print(x2.i) # 50 
+0

這隻會在x1實例的名稱空間中創建i的新變量,因此不會影響x2中的任何內容。 –

+0

我明白了。好吧,我用classmethod編輯了答案,以更新類的靜態變量。我證實這將起作用。 – 2016-12-25 20:02:24

+0

@NavjotSingh好吧現在我爲你做了一件更好的事情。 – 2016-12-25 20:25:50