Курс 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"
- Работа с изменяемыми коллекциями
- Декораторы с @wraps
- Объединение списков с помощью zip
- Получение текущей даты и времени с помощью datetime
- Измерение времени выполнения с помощью time
- Создание словаря с значением по умолчанию
- Оператор «моржа» (Walrus Operator)
- Генерация резюме в Gensim
- Функция divmod() в Python
- Проверка дублей в списке.
- Необязательные аргументы в Python
- Управление фоновыми задачами в Python
- Работа с итераторами через срезы
- Открытие, чтение и закрытие файла
- Модуль pprint: улучшение вывода данных
- Фильтрация данных в Python.
- Работа с collections.Counter
- Порядок операций в Python
- Обмен значений переменных в Python
- Установка и использование howdoi
- Срезы в Python
- Определение объема памяти объекта
- Создание задания в Cron
- Получение текущей даты и времени
- Работа с дробями в Python
- Переопределение метода sub
- Непрерывная проверка в Python
- Использование функции enumerate()
- Получение срезов итераторов
- Обработка исключения UnboundLocalError
- Декоратор проверки активности
- Solidity для DeFi Ethereum
- Философия Python
- Управление памятью в numpy.
- Генератор списка с условием if
- Функции all и any в Python
- Сортировка списка по индексам
- Анализ текста на русском языке с помощью Pymystem3
- Функции с дополнением
- Работа с кортежами в Python
- IPython и Jupyter Notebook: руководство
- Функция print() — вывод информации















