Курс 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. Метод eq для сравнения объектов
  5. Работа с SQLite в Python
  6. Многоточие в Python
  7. Метод get() для словарей
  8. Преобразование данных в Python
  9. Ошибка NotImplemented в Python
  10. Получение идентификатора объекта в памяти
  11. Модуль functools в Python
  12. Форматирование строк в Python
  13. Реализация метода __abs__ в Python
  14. Введение в Python
  15. Инициализация объекта
  16. Основные функции и модули Python
  17. Функция zip() в Python
  18. Объединение коллекций в Python
  19. Magic Commands — улучшение работы с Python
  20. Генерация ключей RSA
  21. Поиск наиболее частого элемента списке
  22. Модуль future Python
  23. Сортировка элементов в Python
  24. Разделение строк в Python
  25. Символ подчеркивания в Python
  26. Модуль inspect: получение информации о объектах
  27. Разделение строк методом split()
  28. Транспонирование 2D-массива с помощью zip
  29. Объединение списков в Python
  30. Работа с каталогами в Python
  31. Работа с байтовыми строками в Python
  32. Работа с парами ключ-значение
  33. Отправка POST-запроса в REST API
  34. Создание таблиц в терминале с PrettyTable
  35. Вывод переменной и строки в Python
  36. Генерация фальшивых данных с Faker
  37. Открытие и запись файлов
  38. Потоковый ввод в Python
  39. Метод enumerate() в Python
  40. Метод __iand__ для пользовательских классов
  41. Проверка дублей в списке.
  42. Склеивание строк через метод join()
  43. Строковое представление объектов
  44. Оператор «not» в Python
  45. Декораторы в Python

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