Для обычного контекстного менеджера реализуйте enter и exit. Первый подготавливает и возвращает ресурс, второй освобождает его и получает сведения об исключении.
Работали ли с контекстными менеджерами? Если у меня есть мой класс и я хочу, чтобы он был контекстным менеджером, что я должен сделать?
Для обычного контекстного менеджера реализуйте __enter__ и __exit__. Первый подготавливает и возвращает ресурс, второй освобождает его и получает сведения об исключении.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для обычного контекстного менеджера реализуйте enter и exit. Первый подготавливает и возвращает ресурс, второй освобождает его и получает сведения об исключении.
Возврат True из exit подавляет исключение; обычно возвращают False или None, чтобы не скрывать сбой. Метод выхода вызывается после успешного входа, поэтому частичную ошибку самого enter нужно уметь очистить там же. Альтернатива — contextlib.contextmanager с try/finally. Для async with используются aenter и aexit, поддерживающие асинхронное ожидание.