Курс 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"
- Библиотека Rich: форматирование текста
- Методы __repr__ и __str__ в Python
- Преобразование числа в список цифр
- Замена подстроки
- Профилирование кода
- Обновление ключей в Python
- None в Python: использование и особенности
- Виртуальные среды в Python
- Основы слова
- PATCH-запрос с библиотекой requests
- Работа с итераторами через срезы
- Проверка подстроки в строке
- Тестирование с responses
- Перегрузка операторов в Python
- Роль object и type в Python
- Работа со строками в Python.
- Конкатенация списков в Python
- Работа с Enum в Python3.
- Метод rename() для переименования файлов и каталогов
- Разделение списка на гнппы
- Извлечение новостей с newspaper3k
- Классы данных в Python
- Аннотации типов в Python
- Ускорение обработки данных с %autoawait
- Создание словаря в Python
- Анализ кода — Python
- Функции-генераторы в Python
- Преобразование данных в Python
- Генерация QR-кодов с Python
- Метод __irshift__ для побитового сдвига вправо
- Работа с набором данных CIFAR10 в PyTorch
- Возвращение нескольких значений
- Транспонирование 2D-массива с помощью zip
- Открытие и запись файлов
- Список переменных в Python
- Декораторы в Python
- Курс Data Scientist в медицине
- Анонимные функции в Python
- Хеши в Python
- Константы в модуле cmath
- Работа с CSV в Python
- Разработка игры Pong с turtle
- Модуль math: константы π и e
- Параллельные вычисления в Python
- Управление ресурсами в Python
- Подсчет часто встречающихся элементов
- Преобразование чисел в Python















