在Python中跨实例维护静态变量的公共值

时间:2016-12-25 19:19:11

标签: python class static class-variables

我已经读过要创建一个静态变量,我们可以在类定义中声明它们而不是在方法内部。但是从Java世界看来,它似乎并不那么“静态”,因为从一个实例改变一个变量的值会创建一个与类变量不同的变量。 我正在寻找一种方法来确保变量的值在不同的实例中保持一致。 StackOverflow上的一个答案提出了以下代码,这对我来说效果不佳。

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

你能用一个例子解释一下是否可以实现这个目标?

1 个答案:

答案 0 :(得分: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