Курс 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
- Курс Data Scientist в медицине
- Настройка Cron
- Форматирование чисел в Python
- Генерация случайных данных в NumPy
- Создание пустых функций и классов в Python
- Работа с YAML в Python
- Объединение списков в Python
- Функции с необязательными аргументами
- Работа со строками
- Использование двоеточия в Python
- Преобразование данных в Python
- Группы исключений в Python
- Перегрузка операторов в Python
- Преобразование регистра строк
- Работа с getopt
- Docstring в Python
- Преобразование текста в нижний регистр
- Работа с WindowsPath()
- Создание тестовых данных с Faker
- Лямбда-функции в Python
- Метод __irshift__ для побитового сдвига вправо
- Обработка ошибок в Python
- UserString в Python
- Создание множества в Python
- Удаление файлов и папок в Python
- Метод enumerate() в Python
- Методы list в Python
- Декораторы в Python
- Шаблоны и наследование в Flask
- ChainMap.new_child() — добавление нового словаря
- Выбор редактора кода.
- Создание и инициализация объектов
- Установка и загрузка Instaloader
- Итерация по коллекции в Python
- Метод округления чисел
- Работа с itertools
- Работа с collections.Counter
- ROT13 Шифр Цезаря в Python
- Python union() функция — объединение множеств
- Enum в Python: создание и использование перечислений
- Генерация фальшивых данных с Faker
- Python: Фильтрация списков с помощью filter()
- Оператор is в Python
- Функция divmod() в Python
- Функция enumerate в Python
- Глобальные переменные в Python















