Контекстный менеджер управляет входом и выходом из блока with, обычно для гарантированной очистки ресурсов. Он реализует enter и exit либо создаётся через contextlib.contextmanager.
[имя] спросил: Ты знаешь, что такое контекстный менеджер? Писал ли ты его вручную, и для чего?
Контекстный менеджер управляет входом и выходом из блока with, обычно для гарантированной очистки ресурсов. Он реализует __enter__ и __exit__ либо создаётся через contextlib.contextmanager.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Контекстный менеджер управляет входом и выходом из блока with, обычно для гарантированной очистки ресурсов. Он реализует enter и exit либо создаётся через contextlib.contextmanager.
Пример использования — временная настройка, lock или собственный ресурс. exit получает сведения об исключении; истинный результат подавляет его, поэтому возвращать True без причины опасно. В генераторном варианте освобождение помещают в finally вокруг yield. Если enter не завершился, обычный exit этого менеджера не вызывается. Личный опыт написания опишите отдельно и честно, не заменяя его теоретическим примером.