Курс Python → Управление контекстом выполнения
Для создания объектов, поддерживающих выражение with, необходимо реализовать протокол управления контекстом исполнения. Этот протокол состоит из двух методов: __enter__ и __exit__. Метод __enter__ выполняется при входе в блок with, а метод __exit__ — при выходе из него.
Пример создания класса, поддерживающего выражение with:
class FileLock:
def __init__(self, filename):
self.filename = filename
self.locked = False
def __enter__(self):
self.locked = True
print(f'Locking file {self.filename}')
# реализация блокировки файла
return self
def __exit__(self, exc_type, exc_value, traceback):
self.locked = False
print(f'Unlocking file {self.filename}')
# реализация разблокировки файла
Теперь можно использовать созданный класс FileLock с оператором with для блокировки и разблокировки файла:
with FileLock('example.txt') as lock:
# работа с файлом, который заблокирован
pass
При выполнении блока with метод __enter__ будет вызван, файл будет заблокирован, и после завершения блока __exit__ будет вызван для разблокировки файла. Это позволяет управлять ресурсами и контекстом исполнения кода более безопасно и удобно.
Таким образом, реализуя методы __enter__ и __exit__ в своем классе, можно создавать объекты, поддерживающие выражение with, для управления ресурсами и контекстом исполнения кода.
Другие уроки курса "Python"
- Объединение списков в Python.
- Настройка шрифта и цвета в Tkinter
- Хранение данных с помощью dataclasses
- Просмотр атрибутов и методов класса
- Встроенные функции Python
- Python Метод sleep() времени
- Обмен значений переменных в Python
- Метод remove() для удаления элемента из списка
- Отладка кода
- Работа с множествами в Python
- Создание новых списков
- Оператор in и not in в Python
- Объявление переменных в Python
- Распаковка аргументов в Python
- Нахождение отличий в списках
- Замена элементов в списке с помощью генераторов списков
- PATCH-запрос с библиотекой requests
- Метод count() для списка
- Инверсия списка/строки в Python
- Логирование с Logzero
- Структура данных deque в Python
- Модуль math: основные функции
- Вычисление разности множеств в Python
- Генераторы списков в Python
- Преобразование объекта в строку
- Списки в Python
- Функция divmod() в Python
- Работа с argparse
- Python Поверхностное Копирование
- Освобождение памяти в Python
- Переопределение метода __rshift__
- Big O оптимизация
- Переменная Шредингера
- Создание задания в Cron
- Декораторы в Python
- Python: Фильтрация списков с помощью filter()
- Проверка списка: any() и all()
- Работа с комплексными числами
- Создание спинбокса в tkinter
- Простой калькулятор Python
- Форматирование строк в Python
- Фильтрация списка чисел
- Модуль xkcd: загрузка комиксов
- Сравнение строк в Python















