Курс 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
- Подсчет вхождений элементов
- Декораторы с аргументами
- Функция enumerate в Python
- Настройка вывода NumPy
- Работа с NumPy
- Многострочные комментарии в Python
- JMESPath в Python
- Обход элементов в Python
- Метод setitem в Python
- Форматирование строк в Python
- Вызов внешних программ в Python с помощью sh
- Функция divmod() в Python
- Метод join() для объединения элементов в строку.
- Избегайте двойного подчеркивания
- Рекурсия для обращения строки
- Подсказки при вводе данных в Python
- Отправка POST-запроса в REST API
- Поиск индексов подстроки
- Обработка исключений в Python
- Генераторы в Python
- Установка пакетов с помощью pip
- Создание и удаление объектов
- Лямбда-функции в Python
- Разработка игры Pong с turtle
- Просмотр внешних файлов в %pycat
- Python reversed() vs срез[::-1]
- Чтение и запись TOML-конфигов
- Итераторы с потерямиZIP
- Списки в Python
- Создание словарей с defaultdict()
- Создание виртуальной среды
- Форматирование строк с f-строками
- Модуль subprocess: запуск внешних команд
- Курс по дообучению ChatGPT
- Преобразование чисел в слова
- Резервирование символов в Python
- Работа с OpenCV
- Расчет времени выполнения
- Обезопасьте ввод данных
- Операторы присваивания в Python
- Генерация случайных чисел Python
- Многострочные строки в Python
- Условные выражения в Python
- Распаковка с оператором *















