Python Glossary English

Python 3.8+functoolsпонятие

functools.cached_property

кэширование

Вычисляет значение свойства один раз и сохраняет в __dict__ экземпляра. При повторном обращении возвращает кэш без вызова метода.

Синтаксис

@functools.cached_property

Кеш сам не сбрасывается: если поля объекта изменились, свойство продолжит отдавать старое значение, пока его не удалить через del obj.area. Работает только у классов с обычным __dict__ — с __slots__ не заведётся, потому что значение просто некуда положить. С Python 3.12 общей блокировки больше нет, так что в многопоточном коде значение может посчитаться несколько раз.

Примеры

from functools import cached_property
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self):
        return 3.14159 * self.r ** 2
c = Circle(5)
print(c.area)  # → 78.53975
print(c.area)  # → 78.53975  (без вычисления)
print('area' in c.__dict__)  # → True
print(type(c.__dict__['area']))  # → <class 'float'>

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности