简化样例代码:
class Numbers(object):
def __init__(self, value):
self.value = value
instance1 = Numbers(100)
instance2 = Numbers(120)
instance3 = Numbers(76)
我想在类(或其他)中设置一个变量,该变量将被设置为所有值的总和(在本例中为100 + 120 + 76)。是否可以使用类变量?
如果你想要自程序启动以来创建的所有实例的总和,并且你不希望实例的值在创建后发生变化,那么很容易在__init__
方法中更新sum
类变量:
class Numbers(object):
sum = 0
def __init__(self, value):
self.value = value
Numbers.sum += value
如果你希望总和只包括当前"活动"的实例,或者如果你希望总和准确地反映实例的value
随时间的变化,这将是相当复杂的。要处理已删除的实例,您可以添加一个__del__
方法。你可以在property
的setter中为value
更新sum
,当有变化时,逻辑上减去前一个值。
def Numbers(object):
sum = 0
def __init__(self, value):
self._value = 0 # initialize this value so the property's setter works
self.value = value
def __del__(self):
Numbers.sum -= self._value
@property
def value(self):
return self._value
@value.setter
def value(self, value):
Numbers.sum += value - self._value
self._value = value
这个实现仍然可能有问题,因为__del__
方法可能会比你预期的更晚被调用(Python的垃圾收集从来没有得到保证)。