Курс Python → Протокол управления контекстом

Создание объектов, поддерживающих выражение with — это мощный инструмент в Python, который позволяет управлять контекстом исполнения кода. Все мы знакомы с использованием with для открытия файлов или установки блокировок, но можно ли самостоятельно реализовать поддержку этого механизма? Да, это возможно благодаря протоколу управления контекстом исполнения, который реализуется через методы __enter__ и __exit__.

Метод __enter__ выполняется при входе в блок кода, обозначенного оператором with. Этот метод может выполнять инициализацию и подготовку объекта к использованию. Например, если вы создаете объект, который нужно открыть, вы можете в методе __enter__ открыть его и вернуть его для дальнейшего использования в блоке кода.

Метод __exit__, с другой стороны, выполняется при выходе из блока кода. Этот метод может выполнять завершающие действия, такие как закрытие файла или освобождение ресурсов. Важно отметить, что метод __exit__ должен обрабатывать любые исключения, возникшие в блоке кода, чтобы гарантировать корректное завершение работы объекта.

class File:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.file = open(self.filename, 'r')
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()

В приведенном примере мы создали класс File, который поддерживает протокол управления контекстом. Метод __enter__ открывает файл для чтения и возвращает его, а метод __exit__ закрывает файл после завершения работы с ним. Теперь мы можем использовать этот класс с оператором with для безопасной работы с файлами.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Python reversed() vs срез[::-1]
  2. Удаление дубликатов из списка
  3. Поиск кода
  4. Обработка исключений в Python
  5. Работа с изменяемыми коллекциями
  6. Тестирование времени с Freezegun
  7. Генераторы в Python
  8. Запуск внешнего кода в Jupyter
  9. Метод invert для побитового отрицания
  10. Метод add для класса Vector
  11. Метод Enumerate() для списков
  12. Проверка типов с помощью isinstance
  13. Декоратор Property в Python
  14. Ограничение итераций в Python
  15. HTTP-запросы с библиотекой Requests
  16. Округление чисел с помощью round
  17. enumerate() в Python для работы с индексами
  18. Проверка надежности пароля на Python
  19. Вызов внешних программ в Python с помощью sh
  20. Счетчик ссылок в Python
  21. Поиск самого длинного слова в списке с использованием max()
  22. Фильтрация списка от «ложных» значений
  23. Создание .exe файла с pyinstaller
  24. Работа с JSON данными в Python
  25. Создание таблиц в терминале с PrettyTable
  26. Вывод символов строки в Python
  27. Оптимизация памяти в Python
  28. Удаление файлов в Python
  29. Установка и использование TensorFlow
  30. Метод __irshift__ для Python
  31. Печать календаря в Python
  32. split() — разделение строки
  33. Список переменных с %who
  34. Установка User-Agent в Python
  35. Функция pow() — возвести число в степень
  36. Команда %dhist — список посещенных каталогов
  37. Применение функции map() в Python
  38. Копирование и вставка текста в Python
  39. Логирование с Logzero
  40. Печать списка с помощью метода join
  41. Отделение звука от видео
  42. Метод get для словарей
  43. Атрибуты класса и экземпляра в Python
  44. Пропуск начальных строк с помощью dropwhile()
  45. Модуль math: основные функции
  46. Визуализация пропусков данных

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