Использование декоратора LRU кэша здесь: http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/Python LRU Cache декоратор Per Instance
from lru_cache import lru_cache
class Test:
@lru_cache(maxsize=16)
def cached_method(self, x):
return x + 5
Я могу создать декорированный метод класса с этим, но в конечном итоге создание глобального кэша, который относится к всех экземпляров теста класса. Тем не менее, я решил создать кеш для каждого экземпляра. Поэтому, если бы я должен был создать 3 теста, у меня было бы 3 кэша LRU, а не 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)
есть декоратор или трюк, который позволит мне легко вызвать этот декоратор, чтобы создать кэш для каждого экземпляра класса?
Помните, что декоратор - это просто синтаксический сахар для 'def method: pass; method = decorate (method) '. Таким образом, вы можете механически перевести это, чтобы создать оформленный метод в вашем '__init__'. –
Вы уверены, что знаете, что такое метод класса? Потому что я думаю, что вы ищете нормальный метод. Если метод класса специфичен для экземпляра, он по определению является обычным методом экземпляра. Или почему именно вам нужен метод класса? Или почему вам нужен кеш «на экземпляр»? – Mayou36