2016-12-25 45 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