Курс 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. Оптимизация памяти с помощью __slots__
  3. Работа с срезами в Numpy
  4. Отправка HTTP-запросов в Python
  5. Python OrderedDict и fromkeys() — работа с словарями
  6. Синхронизация потоков с time.sleep()
  7. Модуль math: константы π и e
  8. Переопределение метода delitem в Python
  9. Основы работы с базами данных в Python
  10. Установка Home Assistant
  11. Разработка Telegram-ботов
  12. Операторы увеличения и уменьшения переменной
  13. Работа с Event() в threading
  14. Цикл for в Python
  15. Создание генераторов в Python
  16. Комментарии в Python.
  17. Принципы программирования
  18. Генератор списка в Python
  19. Объединение Python и Shell
  20. Определение функций с необязательными аргументами
  21. Автоматизация действий с Pyautogui
  22. Манипуляция формой массива в Numpy
  23. Извлечение статей с newspaper3k
  24. Работа с необработанными строками
  25. Создание веб-приложения с Flask
  26. Python Менеджер контекста
  27. Многострочные строки в Python
  28. ROT13 Шифр Цезаря в Python
  29. Переопределение метода __rshift__
  30. Настройка нарезки списков
  31. Решатель судоку на Python с pygame
  32. Лямбда-функции в Python
  33. Проверка на истинность объектов в Python
  34. Цикл for в Python
  35. Создание и обучение модели с Keras
  36. Логирование с Logzero
  37. Работа с комбинациями в Python.
  38. Измерение времени выполнения кода с использованием time
  39. Функция pow() — возвести число в степень
  40. Поиск наиболее частого элемента
  41. Оператор in для Python
  42. Функции min(), max(), sum()
  43. Распаковка с оператором *
  44. Отладка регулярных выражений в Python
  45. Отслеживание прогресса с tqdm
  46. Работа с очередями в Python
  47. Ускорение выполнения кода в Python
  48. Метод Event.wait() в Python
  49. Удаление дубликатов из списка с помощью dict.fromkeys
  50. Форматирование объектов с модулем pprint

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