Курс 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. Модуль functools в Python
  3. Основы Python за 14 дней
  4. Управление ресурсами с контекстными менеджерами
  5. Создание namedtuple из словаря
  6. Генерация чисел с range()
  7. Работа с путями в Python
  8. Генерация случайных чисел в Python
  9. Команда %dhist — список посещенных каталогов
  10. Работа с изображениями PIL
  11. Работа с очередями в Python
  12. Транспонирование 2D-массива с помощью zip
  13. Сортировка и разворот списка
  14. Ветвление выражения в Python
  15. Добавление цвета в консоли
  16. Удаление символа из строки
  17. Combobox в Tkinter
  18. Работа с YAML в Python
  19. Структурирование данных с Pydantic
  20. Установка User-Agent в Python
  21. Переопределение метода divmod
  22. Работа с аргументами командной строки в Python
  23. Группы исключений в Python
  24. Основные операции с библиотекой Numpy
  25. inspect в Python: анализ кода
  26. Метод matmul для умножения матриц
  27. Преобразование PowerPoint в PDF.
  28. Хеширование паролей с использованием salt
  29. Оператор is в Python
  30. Округление дробей в Python
  31. Работа с YAML в Python
  32. Разделение списка на гнппы
  33. Работа с argparse
  34. Функция с **kwargs в Python
  35. Функции all() и any() в Python
  36. Деление в Python
  37. Переопределение метода __rshift__
  38. Работа с defaultdictами в Python
  39. Строки в Python: апострофы и кавычки
  40. Функция count() в Python
  41. Удаление элемента из списка
  42. Python groupby() из itertools: работа с повторяющимися элементами
  43. Оптимизация параметров в Python
  44. Python и Монти Пайтон
  45. Вложенные циклы в Python
  46. Разбиение строки в Python
  47. Добавление элемента к кортежу
  48. Приоритет операций в Python
  49. Создание пар из последовательностей

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