Курс 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. Функциональное программирование в Python
  2. Объединение словарей в Python 3.5+
  3. Модуль pprint: улучшение вывода данных
  4. Работа с Colorama
  5. Проверка версии Python
  6. Метод join() для объединения элементов строки
  7. Модуль sys: основы
  8. Расчет времени выполнения
  9. Сортировка слиянием
  10. Модуль array: создание и использование массивов
  11. Метод __ixor__ для побитового исключающего ИЛИ
  12. Функция reduce() из модуля functools
  13. Логирование с Logzero
  14. Установка и обучение ChatterBot
  15. Преобразование PowerPoint в PDF.
  16. Метод pos в Python
  17. Преобразование Excel в PDF с Spire.XLS
  18. Проверка списка: any() и all()
  19. Удаление элементов из списка в Python
  20. inspect в Python: анализ кода
  21. Метод rsub в Python: расширение функциональности вычитания
  22. Вывод с переменной через запятую
  23. Структурирование данных с Pydantic
  24. Извлечение статей с newspaper3k
  25. Освобождение памяти в Python
  26. Работа с контекстным менеджером Pool
  27. Python: отличительная особенность — отступы
  28. Названия переменных
  29. Преобразование документов в PDF с помощью Spire.Office
  30. Создание вложенного генератора
  31. Запуск Python из интерпретатора
  32. Лямбда-функции в Python
  33. Пространство имен в Python
  34. Переворот строки с использованием цикла
  35. Работа с аргументами командной строки в Python
  36. Умножение строк и списков
  37. Работа с массивами в Numpy
  38. Работа с изображениями Pillow
  39. Оператор walrus в Python
  40. Установка и использование библиотеки google
  41. Использование super() в Python
  42. Навыки Python: строки, типы данных
  43. Конвертация коллекций в Python.
  44. Python Translator: создание локальных переводчиков
  45. Замена атрибута в именованном кортеже
  46. Генератор надежных паролей
  47. Операторы объединения в Python 3.9

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