Курс Python → Протокол управления контекстом

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

Метод __enter__ выполняется при входе в блок with и возвращает объект, который будет связан с переменной в этом блоке. Внутри метода __enter__ обычно происходит инициализация ресурсов, например, открытие файла для чтения или записи. После выполнения кода внутри блока with метод __exit__ автоматически вызывается для освобождения ресурсов.


class File:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        print(f'Открыт файл {self.filename}')
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()
        print(f'Файл {self.filename} закрыт')

В приведенном примере класс File реализует протокол контекстного менеджера. Метод __enter__ открывает файл и выводит сообщение о его открытии, а метод __exit__ закрывает файл и выводит сообщение о его закрытии. При использовании этого класса в блоке with файл будет автоматически закрыт после завершения работы с ним.

Использование контекстных менеджеров позволяет улучшить читаемость и безопасность кода, так как гарантируется освобождение ресурсов даже в случае возникновения исключения. При написании собственных контекстных менеджеров важно правильно реализовать методы __enter__ и __exit__ для корректной работы с ресурсами.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Выборка чисел
  2. Создание словаря в Python
  3. Уникальные значения из списка
  4. Преобразование текста в речь с Python
  5. Преобразование списка в словарь через генератор
  6. Избегайте двойного подчеркивания
  7. Переопределение метода
  8. Оптимизация гиперпараметров с Scikit Optimize
  9. Удаление элементов из списка
  10. Избегайте пустого списка
  11. Подписка на каналы разработчиков
  12. Нарезка списков в Python
  13. Декодирование байтов в строку
  14. Метод join() для объединения элементов строки
  15. Установка и использование Logzero
  16. Создание уникального множества
  17. Метод сравнения объектов в Python
  18. Объединение списков в Python.
  19. Роль ключевого слова self
  20. Глубокое копирование объектов
  21. Операции с кортежами
  22. Создание namedtuple списком полей
  23. Экспорт функций в Python
  24. Метод ne для сравнения объектов
  25. Сравнение def и lambda в Python
  26. Преобразование PowerPoint в PDF.
  27. Транспонирование 2D-массива с помощью zip
  28. Enum в Python
  29. Построение графиков в терминале с bashplotlib
  30. Метод join() с набором
  31. Избегайте использования goto
  32. Работа с deque из collections
  33. Создание директории в Python
  34. Итерация по итерируемым объектам
  35. Определение объема памяти объекта
  36. Форматирование строк в Python
  37. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  38. Списковое включение в Python
  39. Работа с модулем cmath
  40. Роль object и type в Python
  41. Обработка исключения UnboundLocalError
  42. Проверка класса объекта
  43. Работа с набором данных CIFAR10 в PyTorch

Marketello читают маркетологи из крутых компаний