Я пытаюсь найти хороший способ кэширования результатов вызова метода в разных экземплярах объекта. Я могу изменить декоратор memoize, чтобы удалить первый аргумент (который всегда сам) вызова метода, или я могу удалить ядро метода из класса и создать новую функцию, а затем заставить метод вызывать новую функцию (и запомните эту функцию). Я ищу руководство по этому поводу. Может быть, я что-то пропустил или другое решение.
В этом примере метод rich_calc() является статическим, но в моем приложении это не так. Предположим, что он всегда будет возвращать одни и те же данные независимо от свойств объекта, если параметры функции одинаковы. Кроме того, учитывая то, как устроено мое приложение, гораздо удобнее сохранить его как функцию класса.
from time import sleep
class Test(object):
def expensive_calc(self, arg, kwarg1):
sleep(5)
obj1 = Test()
obj2 = Test()
obj1.expensive_calc(1, kwarg1=1)
obj2.expensive_calc(1, kwarg1=1) # Would like this use the cache