我需要将一个对象的属性设置为另一个对象属性的总和,并在每次对这些对象进行修改时重新调整它。 以下是最好的方法吗?
# 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)
答案 0 :(得分: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
实例的引用。那将是更多的工作......