考虑以下简单示例:
我希望你能翻译“sum”并保存计算结果,只要“self.a”和“self.b”不变,我们就不需要重复计算该属性。
仅当“self.a”或“self.b”发生更改时,才应重新计算该属性 - 有没有简单的方法可以做到这一点?
class Foo(object):
def __init__(self):
self.b = self.a = 1
@property
def sum(self):
print 'Recalculating sum'
return self.a + self.b
foo = Foo()
print foo.sum
print foo.sum # Prints 'Recalculating sum' even though neither a or b has changed since previous call
foo.a = 2
print foo.sum # a has been changed to 2 so recalculation is necessary
我希望你能翻译“sum”并保存计算结果,只要“self.a”和“self.b”不变,我们就不需要重复计算该属性。
仅当“self.a”或“self.b”发生更改时,才应重新计算该属性 - 有没有简单的方法可以做到这一点?
@cached_property
(从3.8开始)。我不确定它与在@cache
上叠加@property
有何区别,以及哪种用例更好。文档(https://docs.python.org/3/library/functools.html#functools.cached_property)在一定程度上对其进行了解释。 - Toma
和b
不是函数的参数,所以它们不会被记忆化。即使a
和b
改变,你仍然会得到相同的结果。 - kindall