Middle
47
questionbank

Как создать контекстный менеджер в Python?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Контекстный менеджер можно создать двумя основными способами: с помощью классов и с помощью генераторов с декоратором @contextmanager.

Создание с помощью класса:

Класс должен реализовать методы __enter__ и __exit__. Метод __enter__ вызывается при входе в контекстный блок (with) и может вернуть объект для использования внутри блока. Метод __exit__ вызывается при выходе из блока, даже при возникновении исключения. Он принимает три аргумента: тип исключения, значение исключения и объект traceback. Возвращение True из __exit__ подавляет исключение.

python

Создание с помощью генератора и @contextmanager:

Модуль contextlib предоставляет декоратор @contextmanager, который позволяет создавать контекстные менеджеры с использованием генераторов. Внутри функции-генератора используется оператор yield. Код до yield выполняется при входе в контекст, а код после yield - при выходе.

python

Оба метода позволяют корректно управлять ресурсами, обеспечивая их освобождение даже при возникновении ошибок.