Курс 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"
- Python reversed() vs срез[::-1]
- Удаление дубликатов из списка
- Поиск кода
- Обработка исключений в Python
- Работа с изменяемыми коллекциями
- Тестирование времени с Freezegun
- Генераторы в Python
- Запуск внешнего кода в Jupyter
- Метод invert для побитового отрицания
- Метод add для класса Vector
- Метод Enumerate() для списков
- Проверка типов с помощью isinstance
- Декоратор Property в Python
- Ограничение итераций в Python
- HTTP-запросы с библиотекой Requests
- Округление чисел с помощью round
- enumerate() в Python для работы с индексами
- Проверка надежности пароля на Python
- Вызов внешних программ в Python с помощью sh
- Счетчик ссылок в Python
- Поиск самого длинного слова в списке с использованием max()
- Фильтрация списка от «ложных» значений
- Создание .exe файла с pyinstaller
- Работа с JSON данными в Python
- Создание таблиц в терминале с PrettyTable
- Вывод символов строки в Python
- Оптимизация памяти в Python
- Удаление файлов в Python
- Установка и использование TensorFlow
- Метод __irshift__ для Python
- Печать календаря в Python
- split() — разделение строки
- Список переменных с %who
- Установка User-Agent в Python
- Функция pow() — возвести число в степень
- Команда %dhist — список посещенных каталогов
- Применение функции map() в Python
- Копирование и вставка текста в Python
- Логирование с Logzero
- Печать списка с помощью метода join
- Отделение звука от видео
- Метод get для словарей
- Атрибуты класса и экземпляра в Python
- Пропуск начальных строк с помощью dropwhile()
- Модуль math: основные функции
- Визуализация пропусков данных















