我想描述存储该类实例数量的类实例。这是代码:
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 不增加/减少
答案 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
类,则可能需要重新考虑。