В предыдущем посте⬆️ был пример кеширования функции. В стандартной библиотеке есть еще один способ, но для классов.
Это functools.cached_property (Python3.8+). Логика работы точно такая же, но:
- он предназначен только для метода класса.
- аналогичен декоратору property, то есть мы получим не функцию а свойство класса.
- не принимает аргументов (кроме self), так же как и property.
- кеш сохраняет в атрибутах класса (внутри ˍˍdictˍˍ).
Эдакий частный случай lru_cache для класса. В результате, вместо такой записи
class MyClass:
@property
@functools.lru_cache(maxsize=1)
def value(self):
return 123
мы можем записать более красиво и адаптированно для property
from functools import cached_property
class MyClass:
@cached_property
def value(self):
return 123
Помимо более логичной записи, этот декоратор решает еще ряд проблем, возникающих при декорирвовании свойств классов через lru_cache. Так что в таких случаях его использование не то чтобы желательно, а обязательно!
#tricks