假设您不想修改代码(例如,因为您只想移植到3.3并使用stdlibfunctools.lru_cache
,或者使用functools32
PyPI之外的方法,而不是将配方复制并粘贴到代码中),有一个显而易见的解决方案:为每个实例创建一个新的装饰实例方法。
class Test:
def cached_method(self, x):
return x + 5
def __init__(self):
self.cached_method = lru_cache(maxsize=16)(self.cached_method)