如何监控可变对象的更改?

时间:2012-07-03 12:14:51

标签: python python-2.7

我在某些类上有一些计算上昂贵的属性。只要mutable / underlying属性不变,这些属性就不会改变。有没有办法存储昂贵的财产,只有在做出改变后才重新计算?

1 个答案:

答案 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已经改变。