在 python 中调用 setter 中的方法

Calling a method in setter in python

我想实现根据其他属性计算的 class 属性。

class Sum(object):

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, val):
        self._a = a
        self._constructSeries()

    @property
    def b(self):
        return self._b

    @b.setter
    def b(self, val):
        self._b = b
        self._constructSeries()

    def _constructSeries(self):
        # Some calculations involving a and b
        self._series = function(a, b)

    def __init__(self, a, b):
        self.a = a
        self.b = b

我知道的一种方法是将系列定义为 属性

@property
def series(self):
    return fun(a,b)

但是我想避免每次都调用 fun 因为它需要大量的计算。处理这种情况的标准方法是什么?

如果我没看错,你希望能够更改 a 和 b 而不必每次都计算乐趣,但是当你请求乐趣的结果是最新的时,是否正确?

在这种情况下,您可以使用 属性

def get_series(self):
    if self._series is None or self.updated is False:
        self._series = fun(self.a,self.b)
        self.updated = True
    return self._series
series = property(get_series)

当你设置 a 和 b 时你更新了标志

@property
def a(self):
    self.updated = False
    return self._a


@property
def b(self):
    self.updated = False
    return self._b

然后 self.series returns 更新值,但只要输入从上次计算时发生变化,它就会运行起来很有趣。