Курс 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. Статическая типизация в Python
  4. Фильтрация входных данных в Python
  5. Вычисление разности множеств в Python
  6. Декоратор защиты анонимных пользователей
  7. Создание словарей и множеств в Python.
  8. Список и кортеж в Python
  9. Отправка HTTP-запросов в Python
  10. Обновление данных через PUT запрос
  11. Оператор match в Python
  12. Обработка аргументов Python
  13. Объединение словарей в Python
  14. Сортировка в Python
  15. Изменение элемента списка
  16. Работа с кортежами
  17. Основные функции и модули Python
  18. Аннотации типов в Python
  19. Преобразование текста в нижний регистр
  20. Работа с модулем glob в Python
  21. Команда %dhist — список посещенных каталогов
  22. Настройка вывода в Numpy
  23. Печать месячного календаря
  24. Оператор in и not in в Python
  25. Конкатенация списков в Python
  26. Работа с очередями в Python
  27. Логирование с Logzero
  28. Фильтрация элементов с помощью islice
  29. Отделение звука от видео
  30. Метод count() для списка
  31. Очистка списка от False, None, 0, «»
  32. Проверка типа объекта в Python
  33. Извлечение аудио из видео
  34. Виртуальное окружение Python
  35. Преобразование объекта в строку
  36. Декораторы в Python
  37. Форматирование строк в Python
  38. Тернарный оператор в Python
  39. Метод join для объединения строк
  40. Операции с массивами в NumPy
  41. Зарезервированные слова в Python
  42. Отладка утечек памяти в Python
  43. Измерение времени выполнения кода
  44. Избегайте использования goto
  45. Работа с модулем random
  46. Переопределение унарных операторов
  47. Запуск внешнего кода в Jupyter
  48. Python: динамическая типизация и проверка типов

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