使用在此处找到的LRU Cache修饰符:http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/
from lru_cache import lru_cache
class Test:
@lru_cache(maxsize=16)
def cached_method(self, x):
return x + 5
我能够使用这个方法创建一个带有装饰器的类方法,但是它最终会创建一个适用于所有 Test 类实例的全局缓存。然而,我的意图是创建一个每个实例都有自己的缓存。因此,如果我实例化3个 Tests,我将拥有3个LRU缓存,而不是适用于所有3个实例的1个LRU缓存。
唯一提示我知道发生了这种情况的是,在调用不同类实例的装饰方法的cache_info()时,它们都返回相同的缓存统计信息(考虑到它们正在与非常不同的参数进行交互,这种情况极不可能发生):
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
是否有装饰器或技巧可以让我轻松地使这个装饰器为每个类实例创建一个缓存?
__init__
中创建装饰方法。 - Francis Avila