Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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 在其他对象属性上设置总和的最佳方法_Python_Oop - Fatal编程技术网

Python 在其他对象属性上设置总和的最佳方法

Python 在其他对象属性上设置总和的最佳方法,python,oop,Python,Oop,我需要将一个对象的属性设置为另一个对象属性的总和,并在对这些对象进行修改时进行重新调整。 以下是最好的方法吗 # 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

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

# 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.summared\u数组
a属性:

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\u of_Bs
,以便它知道列表何时被修改,并保存它绑定到的
objectA
实例上的引用。这将是更多的工作…

我认为最防弹的方法是使
self.summated\u数组成为一个属性:

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\u of_Bs
,以便它知道列表何时被修改,并保存它绑定到的
objectA
实例上的引用。这将是更多的工作…

谢谢,这很有帮助。我从来没有完全确定什么时候使用
@property
装饰器合适,以及它提供了什么优势。谢谢,这很有帮助。我从未完全确定何时使用
@property
装饰器是合适的,以及它提供了什么优势。