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

Что такое контекстный менеджер, какие задачи он решает и как написать свой через класс и через декоратор?

Компании, где спрашивали
fabriqeue

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

sobes.tech AI

Контекстный менеджер в Python — это объект, который управляет ресурсами, обеспечивая их корректное открытие и закрытие. Он используется с конструкцией with, что гарантирует выполнение кода очистки даже при возникновении исключений.

Задачи контекстного менеджера:

  • Автоматическое освобождение ресурсов (файлы, соединения, блокировки)
  • Обеспечение чистоты кода и предотвращение утечек ресурсов

Пример реализации через класс:

class MyContextManager:
    def __enter__(self):
        print("Ресурс открыт")
        return self

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

with MyContextManager() as cm:
    print("Работа с ресурсом")

Пример реализации через декоратор contextlib.contextmanager:

from contextlib import contextmanager

@contextmanager
def my_context():
    print("Ресурс открыт")
    try:
        yield
    finally:
        print("Ресурс закрыт")

with my_context():
    print("Работа с ресурсом")

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