Курс 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
- Декоратор @override
- Сортировка HTML по CSS-селектору
- Работа с необработанными строками
- Поиск самого длинного слова в списке с использованием max()
- Создание словарей с defaultdict()
- Удаление элементов из списка
- Вложенные генераторы в Python
- Очистка списка от False, None, 0, «»
- Создание файла с проверкой ошибки
- Обработка ошибок ввода данных
- Определение наиболее частого элемента с помощью collections.Counter
- Создание тестовых данных с Faker
- Принципы программирования
- Использование defaultdict в Python
- Библиотека wikipedia для Python
- Метод rsub для пользовательских чисел
- Обновление множества в Python
- Конвертация коллекций в Python
- Курс по дообучению ChatGPT
- Проверка типов с помощью isinstance
- Списки в Python
- Передача словаря через **kwargs
- Генераторные функции в Python
- Метод join() для объединения элементов
- Вывод символов строки в Python
- Обновление ключей в Python
- Работа с Path в Python
- Работа с enumerate()
- Протокол управления контекстом
- Преобразование Excel в PDF с Spire.XLS
- Модуль Operator в Python
- Типы возвращаемых значений в Python
- Непрерывная проверка в Python
- Вставка переменных в шаблоны Flask
- Разделение функций на этапы
- Путь к интерпретатору Python
- Работа с Telegram API на Python
- Сортировка элементов в Python
- Декораторы в Python
- Pretty-printing JSON в Python
- Модуль xkcd: добавление юмора в Python
- Инициализация объекта
- Множественные конструкторы в Python
- GitHub в Telegram: подписка на уведомления















