Курс 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
- Использование html-скриптов в Jupyter Notebook
- Списки в Python: синтаксис представления
- Подчеркивание в REPL
- Передача аргументов в Python
- Работа с timedelta
- Строки в Python: апострофы и кавычки
- Удаление falsy-значений из списка с помощью filter
- Отладка кода
- Установка и использование библиотеки google
- Уникальность ключей в словаре
- Создание новых списков
- Отладка в командной строке
- Блок else в Python
- Избегание циклических зависимостей классов в Python
- Перегрузка операторов в Python
- Определение размера папок в Python
- Метод ifloordiv для пользовательских классов
- Создание генераторов в Python
- Разделение строки с помощью split()
- Установка и использование pyshorteners
- Модуль os: работа с файлами и папками
- Перезапуск ячейки в Jupyter Notebook с dostoevsky
- Импорт модуля из другого каталога
- Построение графиков в терминале с bashplotlib
- Печать комбинаций в Python с Itertools
- Роль ключевого слова self
- Безопасные SQL-запросы в Python 3.11
- Функция enumerate() — Python
- Combobox в Tkinter
- Обработка данных в Python
- Работа с getopt
- Изменение регистра данных
- Создание словаря через dict comprehension
- Настройка шрифта и цвета в Tkinter
- Обход дочерних элементов BeautifulSoup
- Различия символов в Python
- Многопоточность и асинхронное программирование в Python
- Объединение списков в Python
- Генераторы в Python
- Декораторы в Python
- Функция format() в Python
- Создание копии списка в Python
- Работа со словарями в Python
- Переменные в Python
- Оператор is в Python
- Работа со строками в Python















