РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
231 of 252 menu

Класс cached_property

Класс cached_property из модуля bottle представляет собой декоратор для создания вычисляемых свойств класса. В отличие от обычного property, значение вычисляется только при первом обращении, а затем сохраняется во внутреннем словаре экземпляра. При повторных обращениях возвращается уже готовое значение, что позволяет избежать повторных затратных вычислений.

Декоратор применяется к методу класса, первым параметром которого передаётся экземпляр self. Метод должен возвращать значение, которое будет закэшировано. После первого вызова метод больше не вызывается.

Синтаксис

from bottle import cached_property class MyClass: @cached_property def prop(self): return value

Пример

Давайте создадим класс с кэшируемым свойством, которое вычисляется один раз:

from bottle import cached_property class Data: def __init__(self): self._count = 0 @cached_property def value(self): self._count += 1 return 'hello' d = Data() res1 = d.value res2 = d.value print(res1) print(res2) print(d._count)

Результат выполнения кода:

"hello" "hello" 1

Как видно из примера, метод value был вызван только один раз, несмотря на два обращения к свойству.

Пример

Давайте используем cached_property в приложении Bottle для кэширования результата дорогостоящей операции:

from bottle import Bottle, cached_property app = Bottle() class Config: @cached_property def data(self): return ['a', 'b', 'c', 'd', 'e'] config = Config() @app.route('/') def index(): return str(config.data) app.run(host='localhost', port=8080)

Результат выполнения кода для адреса /:

<+html+> ['a', 'b', 'c', 'd', 'e'] <-html+>

При каждом запросе к серверу список data не создаётся заново, а берётся из кэша экземпляра config.

Смотрите также

  • класс DictProperty,
    который предоставляет доступ к словарю через атрибуты
  • класс lazy_attribute,
    который вычисляет атрибут при первом обращении
  • функцию load,
    которая загружает модуль или объект по имени
  • функцию yieldroutes,
    которая превращает генератор в набор маршрутов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить