Курс 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"
- Методы shutil для работы с файлами
- Big O оптимизация
- Кортежи в Python: особенности и преимущества
- Резервирование символов в Python
- Генераторы данных
- Карта бомбоубежищ в Москве и Питере
- Работа с GitHub в Telegram
- Функция zip() в Python
- Создание списка дат
- Codecademy в Telegram
- Динамические маршруты во Flask
- Транспонирование матрицы в Python
- Поиск частого элемента
- Множественное присваивание в Python
- Автоматизация действий с Pyautogui
- JMESPath в Python
- Работа с итераторами через срезы
- Переопределение метода delitem в Python
- Наследование в программировании
- Преобразование range в итератор
- Получение обратного списка чисел
- Тестирование времени с Freezegun
- Объединение списков в строку
- Форматирование строк с % в Python
- Переопределение метода __or__()
- Преобразование в float
- Генераторы в Python
- Преобразование кортежа в словарь.
- Асинхронное выполнение задач в Python
- Метод Enumerate() для списков
- Вычисление фазы комплексного числа
- Лямбда-функции в Python
- Хеши в Python
- Работа с массивами в Numpy
- Проверка кортежей.
- Создание и использование модулей в Python
- Гибкие функции Python
- Синтаксис переменных цикла в Python
- Метод join для объединения строк
- Структура данных словарь в Python
- Оператор распаковки в Python
- Модуль os в Python: работа с файлами
- Разработка игры Pong с turtle
- Выход из профиля в Django
- Многострочные комментарии в Python
- Сортировка в Python















