Просто подумал, как это реализовать ... Зачем вообще заморачиваться с регистрацией методов с помощью декоратора и отслеживанием их в _cache_funcs
? Вместо этого перебрать методы классов и попытаться запустить на них .cache_clear()
?
class Foo:
@lru_cache(maxsize=16)
def reads_data_somewhere(self):
return 2 + 2
def clear_cache(self):
for method in dir(self):
try:
getattr(self, method).cache_clear()
except AttributeError:
pass
f = Foo()
print(f.reads_data_somewhere())
print(f.reads_data_somewhere())
print(f.reads_data_somewhere())
print(f.reads_data_somewhere())
print(f.reads_data_somewhere.cache_info())
f.clear_cache()
print(f.reads_data_somewhere.cache_info())
Вывод:
4
4
4
4
CacheInfo(hits=3, misses=1, maxsize=16, currsize=1)
CacheInfo(hits=0, misses=0, maxsize=16, currsize=0)