2013-03-22 86 views
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) 

回答

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的引用。這將是更多的工作...

+0

謝謝,這有幫助。我從來沒有完全確定什麼時候適合使用'@ property'裝飾器,以及它作爲一個優勢提供了什麼。 – chase 2013-03-22 03:55:43

相關問題