Выбор ответа Senior Декораторы обновлено
lru_cache на методе экземпляра
Вопрос
Чем опасен @functools.lru_cache на обычном методе класса?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: self попадает в ключи кеша и держит экземпляры в памяти. Декоратор применяется к функции в классе, поэтому кеш один на все экземпляры, а self входит в ключ.
Варианты ответа
- Он не работает с методами и бросает
TypeErrorпри вызове - Кеш будет свой у каждого экземпляра и не даст выигрыша
selfпопадает в ключи кеша и держит экземпляры в памятиправильный ответ- Метод станет статическим и потеряет доступ к
self
Разбор
Декоратор применяется к функции в классе, поэтому кеш один на все экземпляры, а self входит в ключ. Пока запись в кеше, объект не будет собран сборщиком мусора: утечка, особенно без maxsize. Варианты: functools.cached_property для вычисляемых атрибутов, кеш в атрибуте экземпляра или ключ по полям вместо self. Ошибки при этом нет, и self остаётся доступным.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.