Курс 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"
- Оператор Walrus в Python
- Работа с библиотекой xkcd
- Создание коллекций из генератора
- Работа со стеком в Python
- Применение функции к элементам списка
- JMESPath в Python
- Работа с множествами в Python
- Проверка кортежей.
- Преобразование текста в нижний регистр
- Область видимости переменных в Python
- Работа с кортежами в Python
- Работа с часовыми поясами в Python
- Вычисление разности множеств в Python
- Разбиение текста в Python
- Работа с датами в Python
- Класс Counter() для подсчета элементов
- Работа с аргументами командной строки
- Функция __init__ в Python
- Переопределение унарных операторов
- Удаление элемента из списка в Python
- Отладка кода
- Получение идентификатора объекта в памяти
- Работа с процессами в Python
- Декораторы классов
- Утечки переменных цикла в Python 3.x
- Обмен значений переменных в Python
- Преобразование списков в словарь
- Python Метод sleep() времени
- Лямбда-функции для min/max
- Поиск с помощью регулярных выражений
- Python-dateutil — работа с датами
- Создание уникального проекта
- Работа с набором данных CIFAR10 в PyTorch
- Пространство имен в Python
- Сортировка элементов с OrderedDict
- Преобразование числа в восьмеричную строку
- Работа с модулем bisect
- Применение функции к списку
- Измерение времени выполнения кода с использованием time
- Форматирование даты с strftime()
- Функция product() из itertools
- Преобразование документов в PDF с помощью Spire.Office
- Метод ior для битовых операций
- Метод rxor для операции побитового исключающего «или»















