Курс 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"
- Преобразование списков в словарь
- Преобразование числа в список цифр
- Модуль sys: основы
- Проверка подстроки в строке с помощью in
- Метод __iand__ для пользовательских классов
- Удаление ссылок в Python
- Метод __iand__ для пользовательских классов
- Логирование в Python
- Абстракции словарей и множеств в Python
- Хеширование паролей с использованием salt
- Оператор == в Python
- Метод Event.wait() в Python
- Метод splitlines() для разделения строк
- Параллельные вычисления в Python
- Названия столбцов в Python таблицах
- Работа с изображениями Pillow
- Подсчет элементов с помощью Counter из collections
- Преобразование списка в словарь через генератор
- Метод repr() в Python
- Улучшение читаемости кода в Python
- Подписка на @SelectelNews
- Объединение словарей в Python
- Декоратор для группы пользователей в Django
- Декоратор total_ordering для класса Point
- Создание инструмента обнаружения плагиата
- Объединение строк с помощью метода join
- Возврат нескольких значений из функции
- Декораторы в Python
- Проверка подстроки в строке
- Избегайте пустого списка
- Печать календаря в Python
- Генерация фальшивых данных с Faker
- Преобразование range в итератор
- Сортировка с помощью key
- Экранирование символов в Python
- Метод join() для объединения элементов
- Декораторы в Python
- Экспорт данных в файл.
- Декораторы с @wraps
- Python: Фильтрация списков с помощью filter()
- Получение срезов итераторов
- Работа с URL-адресами в Python















