定义Class中某些对象属性的总和



简化样例代码:

    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的垃圾收集从来没有得到保证)。

最新更新