在python中的setter中调用方法

问题描述 投票:0回答:1

我想实现从其他属性计算出的类属性。

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,因为这需要大量的计算。处理这种情况的标准方法是什么?

python class getter-setter
1个回答
0
投票

如果我做对了,您希望能够在不每次计算乐趣的情况下更改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
© www.soinside.com 2019 - 2024. All rights reserved.