Sobes.tech
Назад к вопросам
Junior — Middle
61

Какие методы реализации контекстных менеджеров в Python ты знаешь?

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

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

sobes.tech AI

В Python есть два основных способа реализации контекстных менеджеров:

  1. Через методы __enter__ и __exit__ в классе

    Нужно определить класс с методами:

    • __enter__(self) — вызывается при входе в блок with, возвращает объект, который будет присвоен переменной после as.
    • __exit__(self, exc_type, exc_val, exc_tb) — вызывается при выходе из блока, здесь можно обработать исключения и освободить ресурсы.

    Пример:

    class MyContext:
        def __enter__(self):
            print('Вход')
            return self
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('Выход')
    
    with MyContext() as ctx:
        print('В теле блока')
    
  2. С помощью декоратора @contextmanager из модуля contextlib

    Позволяет написать генератор, где до yield — код входа, после yield — код выхода.

    Пример:

    from contextlib import contextmanager
    
    @contextmanager
    def my_context():
        print('Вход')
        yield
        print('Выход')
    
    with my_context():
        print('В теле блока')
    

Оба способа широко используются в Python для управления ресурсами, например, для работы с файлами, блокировками, сетевыми соединениями и т.д.