Курс 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 с PrettyTable
- None в Python: использование и особенности
- Работа с itertools
- Оператор == в Python
- Оформление кода по PEP 8
- UserList в Python: Описание и примеры использования
- Создание и обучение модели с Keras
- Транспонирование 2D-массива с помощью zip
- Хранение переменных в словаре.
- Поиск наиболее частого элемента в списке
- Создание комплексных чисел
- Игра «Угадывание чисел»
- Работа с временем в Python
- Удаление файлов с shutil.os.remove()
- Создание словаря через dict comprehension
- Представление бесконечности в Python
- Поиск подстроки в строке
- Генераторы в Python
- Получение списка файлов в директории с использованием os
- Создание вложенного генератора
- Работа с timedelta в Python
- Взаимодействие с внешними процессами в Python
- Создание уникального множества
- Тип данных TypeVarTuple
- Оператор деления для класса Rational
- Проекты на Python
- Python enumerate() использование
- Оптимизация памяти с __slots__
- Декораторы в Python
- Подсказки типов в Python
- Lambda Functions in Python
- Удаление элементов из списка
- Проверка версии Python
- Безопасный доступ к значениям словаря
- Разработка Telegram-ботов
- Объединение словарей в Python
- Магические методы в Python
- Python: цикл for и оператор присваивания
- Установка виртуального окружения Python
- Вывод букв строки в Python
- Сериализация данных в JSON с помощью json.dumps
- Протокол управления контекстом
- Python UserString — создание подклассов строк















