Python 3.x Python:定义类中某些对象属性的总和?
简化示例代码:Python 3.x Python:定义类中某些对象属性的总和?,python-3.x,Python 3.x,简化示例代码: class Numbers(object): def __init__(self, value): self.value = value instance1 = Numbers(100) instance2 = Numbers(120) instance3 = Numbers(76) 我想在类中设置一个变量(或其他),该变量将设置为所有值的总和(本例中为100+120+76)。可以使用类变量吗?如果您希望该和是自程序启动以来创建的所有实例的和,并且
class Numbers(object):
def __init__(self, value):
self.value = value
instance1 = Numbers(100)
instance2 = Numbers(120)
instance3 = Numbers(76)
我想在类中设置一个变量(或其他),该变量将设置为所有值的总和(本例中为100+120+76)。可以使用类变量吗?如果您希望该和是自程序启动以来创建的所有实例的和,并且您不希望实例的值在创建后发生任何变化,则可以在
\u init\u
方法中轻松更新sum
类变量:
class Numbers(object):
sum = 0
def __init__(self, value):
self.value = value
Numbers.sum += value
如果您希望总和仅包括当前“活动”实例,或者希望总和准确反映实例的值随时间的变化,那么它将相当复杂。要处理已删除的实例,您可以添加\uu del\uu
方法。您可以在属性
的setter中为值
更新和
,逻辑上在发生更改时减去以前的值
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
尽管如此,这个实现仍然可能存在问题,因为调用\uu del\uu
方法的时间可能比您预期的要晚(Python的垃圾收集永远无法保证)。我已经看到了这一点:但没有设法使用该线程中的信息来解决我的问题。