un1t
@un1t

Каким образом инвалидируется cached_property?

В джанге есть декоратор который позволяет превратить метод в проперти и закешить его.
Точнее судя по коду, результат выполнения метода при первом обращении превращяется в атрибутом объекта с тем же именем.

class cached_property(object):
    """
    Decorator that converts a method with a single self argument into a
    property cached on the instance.

    Optional ``name`` argument allows you to make cached properties of other
    methods. (e.g.  url = cached_property(get_absolute_url, name='url') )
    """
    def __init__(self, func, name=None):
        self.func = func
        self.__doc__ = getattr(func, '__doc__')
        self.name = name or func.__name__

    def __get__(self, instance, cls=None):
        if instance is None:
            return self
        res = instance.__dict__[self.name] = self.func(instance)
        return res


Для инвалидайции кеша в документации описано нужно использовать del.
del person.friends # or delattr(person, "friends")

И это правда работает.
Только вот не ясно каким образом это работает. Ведь метод __delete__ не определен.
  • Вопрос задан
  • 505 просмотров
Пригласить эксперта
Ответы на вопрос 1
@iLq
cached_property наследуется от object, у которого имеется метод __delattr__
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы