我在某些类上有一些计算上昂贵的属性。只要mutable / underlying属性不变,这些属性就不会改变。有没有办法存储昂贵的财产,只有在做出改变后才重新计算?
答案 0 :(得分:1)
您可以在属性方法中测试其他变量,并将它们用作缓存键的一部分:
class CachedProperties(object):
@property
def expensiveValue(self):
cacheKey = (self.var1, self.var2)
if cacheKey in self._expensiveValueCache:
return self._expensiveValueCache[cacheKey]
# No cached value available, calculate it now
res = self._expensiveValueCache[cacheKey] = calculation(self.var1, self.var2)
return res
现在你推迟计算,直到你真的需要昂贵的值和 var1或var2已经改变。