为什么我的类变量_x没有增加?

时间:2019-11-30 20:32:32

标签: python python-3.x

我想描述存储该类实例数量的类实例。这是代码:

class WeAre:
    _x = 0

    def __init__(self):
        self._x += 1

    @property
    def count(self):
        return self._x

    @count.setter
    def count(self, val):
        return None

    @count.deleter
    def count(self):
        return None

    def __del__(self):
        self._x -= 1    

a = WeAre()
print(a.count)
b, c = WeAre(), WeAre(),
a.count = 100500
print(a.count, b.count, c.count)
del b.count
del b
print(a.count)

这是我的输出:

1
1 1 1
1

我不明白为什么类变量 _x 不增加/减少

1 个答案:

答案 0 :(得分:3)

在构造函数中,您正在创建实例变量,从而使类变量蒙上阴影。因此,您始终使用对象实例的变量。

class WeAre:
    _x = 0  # <-- class variable
                         #       creates     uses
                         #      object var  class var
                         #
                         #          |         |
    def __init__(self):  #          V         V          
        self._x += 1     # same as self._x = self._x + 1

那行得通

class WeAre:
    _x = 0

    def __init__(self):
        WeAre._x += 1

但是,如果您需要覆盖WeAre类,则可能需要重新考虑。