Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python:定义类中某些对象属性的总和?_Python 3.x - Fatal编程技术网

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的垃圾收集永远无法保证)。

我已经看到了这一点:但没有设法使用该线程中的信息来解决我的问题。