Кэширование свойства в ООП в Python
Если свойство считает что-то тяжелое,
неудобно выполнять вычисление при каждом
чтении. В Python модуль functools
дает декоратор cached_property:
результат запоминается, и при повторном
обращении код свойства уже не выполняется.
Подключим декоратор и сделаем класс
Circle с кэшируемой площадью:
from functools import cached_property
class Circle:
def __init__(self, radius):
self.__radius = radius
@cached_property
def area(self):
print('calc')
return self.__radius * self.__radius * 3.14
Создадим объект и два раза прочитаем
свойство area:
circle = Circle(10)
print(circle.area) # выведет 'calc' и площадь
print(circle.area) # выведет только площадь
Сделайте класс Employee с зарплатой
и свойством, которое один раз считает
дорогое значение надбавки к зарплате.
Проверьте, что при повторном чтении
надбавка не пересчитывается.