2016-12-25 9 views
1

私は静的変数を作成するためにそれを読んでいます。メソッド内ではなくクラス定義内で宣言できます。しかし、変数の値を1つのインスタンスから変更すると、クラス変数とは異なる独自の変数が作成されるため、Javaの世界から見た場合、それはあまり「静的」ではないようです。 私は、変数の値が異なるインスタンス間で一貫していることを保証する方法を探しています。 StackOverflowの答えの1つが、私にとってうまくいかないコードの次の部分を示唆していました。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に動的プロパティがあるので、あなたはこのオプションを考慮していないと考えていますか? –

答えて

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

私は参照してください。さて、クラスの静的変数を更新するために、クラスメソッドを使って答えを編集しました。私はこれが動作することを確認した。 –

+0

@NavjotSingh大丈夫私は今あなたのためにさらに良いものを手に入れました。 –

関連する問題