Курс 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
- Форматирование строк в Python
- Обработка ошибок в Python
- Структура данных словарь в Python
- Переопределение метода sub
- Измерение времени выполнения кода с использованием time
- Обработка исключений в Python
- Официальный канал Python в Telegram
- Модуль pprint
- Генераторы в Python
- Многострочные комментарии в Python
- Функция enumerate() в Python
- Создание задания в Cron
- Python union() функция — объединение множеств
- Генерация чисел с range()
- Переопределение метода __pow__
- Условные выражения в Python
- Нахождение разницы между списками в Python
- Списковый компрехеншен.
- Распаковка с оператором *
- Работа с каталогами в Python
- Обратное распространение ошибки
- Генераторы в Python
- Роль запятой в Python
- Функции any() и all() в Python
- Аннотации типов в Python
- Отношения подклассов в Python
- Синтаксис переменных цикла в Python
- Dict Comprehension в Python
- Отслеживание выполнения программы с библиотекой tqdm
- Избегайте ошибку FileNotFoundError
- Оператор += в Python
- Метод append() для списка
- Проверка ввода с помощью isdigit
- Многопоточность и асинхронное программирование в Python
- Создание генераторов в Python
- Закрытие файла в Python
- Работа с argparse
- Работа с YAML в Python
- Операции со строками в Python
- Оператор break в Python
- Импорт объектов из модулей
- Округление дробей в Python
- Использование defaultdict в Python
- Отладка кода















