Ghostly Python
Фотография
нажмите — покажем
нажмите — покажем
📱 Фишка: functools.cached_property — ленивое свойство с кэшированием
cached_property превращает метод в свойство, которое вычисляется один раз при первом доступе и кэшируется в экземпляре. Полезно для дорогих вычислений и ленивой инициализации
from functools import cached_property
import time
class Report:
def init(self, user_id):
self.user_id = user_id
@cached_property
def stats(self):
print("Вычисляю...") # выполнится только при первом доступе
time.sleep(1)
return {"orders": 42, "spent": 199.99}
r = Report(123)
print(r.stats) # первый доступ — расчёт и кэширование
print(r.stats) # последующие — мгновенно из кэша
del r.dict["stats"] # инвалидация кэша
print(r.stats) # пересчёт после инвалидации
📌 Как это работает?
🟢 @cached_property сохраняет результат в instance.__dict__ под именем свойства.
🟢 Для обновления данных удалите кэш: del obj.__dict__["attr"] — значение пересчитается при следующем доступе.
🟢 Идеально для «ленивых» параметров: конфигов, аггрегатов из БД/API, тяжёлых вычислений
🐍 Ghostly Python | #фишки
16 · 3K ·