Курс 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. Изменение списка срезом
  4. inspect в Python: анализ кода
  5. Принципы SRP и OCP
  6. Атрибуты класса и экземпляра в Python
  7. Функция product() из itertools
  8. Установка Python3.7 и PIP
  9. Команда %dhist — список посещенных каталогов
  10. Печать месячного календаря
  11. Настройка вывода NumPy
  12. Конкатенация строк в Python
  13. Копирование объектов в Python
  14. Просмотр файла в Jupyter Noteboo
  15. Оператор del в Python
  16. Функция __init__ в Python
  17. Метод Event.wait() в Python
  18. Python Метод sleep() времени
  19. Работа со строками в Python
  20. Декораторы в Python
  21. Деление в Python
  22. Шаблоны Flask: условия и циклы
  23. Обработка ошибок в JSON данных
  24. Функции min(), max(), sum()
  25. Обработка данных в Python
  26. Нахождение самого длинного слова в списке с помощью max
  27. Удаление falsy-значений из списка с помощью filter
  28. Непрерывная проверка в Python
  29. Сравнение строк в Python
  30. Оператор assert в Python
  31. Работа с NumPy
  32. Установка User-Agent в Python
  33. Основы слова
  34. Проверка надежности пароля на Python
  35. Python enumerate() функции
  36. Проверка запуска скрипта или импорта модуля
  37. Оператор in для проверки наличия элемента
  38. Конвертация изображений в PDF
  39. Создание новых функций через partial
  40. Удаление эмодзи с помощью pandas
  41. Dict Comprehension в Python
  42. Множественное наследование в Python
  43. Форматирование чисел в Python
  44. Метод enumerate() в Python
  45. Python Поверхностное Копирование
  46. Работа с географическими данными в Python
  47. Подчеркивание в REPL

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