Sobes.tech
Назад к вопросам
Middle
2

Что такое контекстный менеджер в Python? Зачем нужен? Как написать свой?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Контекстный менеджер в Python — это объект, который определяет методы __enter__ и __exit__, позволяющие управлять ресурсами (например, файлами, соединениями) с помощью конструкции with. Это удобно для автоматического открытия и закрытия ресурсов, даже если внутри блока возникнут исключения.

Зачем нужен:

  • Гарантирует корректное освобождение ресурсов.
  • Упрощает код, делая его более читаемым и безопасным.

Как написать свой контекстный менеджер:

  1. Через класс с методами __enter__ и __exit__:
class MyContextManager:
    def __enter__(self):
        print("Вход в контекст")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Выход из контекста")
        # Можно обработать исключения, если нужно

with MyContextManager() as cm:
    print("Внутри блока with")
  1. Через декоратор contextlib.contextmanager с генератором:
from contextlib import contextmanager

@contextmanager
def my_context():
    print("Вход в контекст")
    yield
    print("Выход из контекста")

with my_context():
    print("Внутри блока with")

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