0

我需要将一个对象的属性设置为另一个对象属性的总和,并在对这些对象进行修改时对其进行重新调整。以下是最好的方法吗?

# object A has several object B's - (object A aggregates object B)
class objectA:
    def __init__(self, somevar):
        self.somevar = somevar

        self.list_of_Bs = [B(var) for b in range(0,2)]

        # sum of several functions or something
        self.summed_array = sum(b.array for b in self.list_of_Bs)

class objectB:
    def __init__(self, var):
        self.var = var

        self.array = gaussian_function(x, center, var, etc)
4

1 回答 1

3

我认为最防弹的方法是制作self.summed_array一个属性:

class objectA(object):
    def __init__(self,somevar):
        ...

    @property
    def summed_array(self):
        return sum(b.array for b in self.list_of_Bs)

当然,如果这种求和会很昂贵,您可能希望将此作为一种方法,而不是一种属性,以使用户明确知道正在执行计算。然后用户可以根据需要选择是否以其他方式缓存该值。

您的另一个选择是进行修改self.list_of_Bs,以便它知道列表何时被修改,并在objectA它所绑定的实例上保存一个引用。这将是更多的工作......

于 2013-03-22T01:02:39.807 回答