functools.cached_property
Превращает метод в свойство, значение которого вычисляется один раз и сохраняется в словаре экземпляра.
Сигнатура
@functools.cached_propertyВ отличие от обычного property, cached_property вычисляет значение лишь при первом обращении, а затем возвращает сохранённый результат. Класс должен иметь изменяемый __dict__ (не __slots__).
from functools import cached_property
class Dataset:
def __init__(self, values):
self.values = values
@cached_property
def total(self):
print('вычисляю...')
return sum(self.values)
d = Dataset([1, 2, 3])
print(d.total) # вычисляю... \n 6
print(d.total) # 6 (без повторного вычисления)