对其他对象属性进行求和的最佳方法

对其他对象属性进行求和的最佳方法

问题描述:

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

# 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) 

我认为最防弹的办法就是让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的引用。这将是更多的工作...

+0

谢谢,这有帮助。我从来没有完全确定什么时候适合使用'@ property'装饰器,以及它作为一个优势提供了什么。 – chase 2013-03-22 03:55:43