Курс 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"

  1. Объединение списков в Python.
  2. Настройка шрифта и цвета в Tkinter
  3. Хранение данных с помощью dataclasses
  4. Просмотр атрибутов и методов класса
  5. Встроенные функции Python
  6. Python Метод sleep() времени
  7. Обмен значений переменных в Python
  8. Метод remove() для удаления элемента из списка
  9. Отладка кода
  10. Работа с множествами в Python
  11. Создание новых списков
  12. Оператор in и not in в Python
  13. Объявление переменных в Python
  14. Распаковка аргументов в Python
  15. Нахождение отличий в списках
  16. Замена элементов в списке с помощью генераторов списков
  17. PATCH-запрос с библиотекой requests
  18. Метод count() для списка
  19. Инверсия списка/строки в Python
  20. Логирование с Logzero
  21. Структура данных deque в Python
  22. Модуль math: основные функции
  23. Вычисление разности множеств в Python
  24. Генераторы списков в Python
  25. Преобразование объекта в строку
  26. Списки в Python
  27. Функция divmod() в Python
  28. Работа с argparse
  29. Python Поверхностное Копирование
  30. Освобождение памяти в Python
  31. Переопределение метода __rshift__
  32. Big O оптимизация
  33. Переменная Шредингера
  34. Создание задания в Cron
  35. Декораторы в Python
  36. Python: Фильтрация списков с помощью filter()
  37. Проверка списка: any() и all()
  38. Работа с комплексными числами
  39. Создание спинбокса в tkinter
  40. Простой калькулятор Python
  41. Форматирование строк в Python
  42. Фильтрация списка чисел
  43. Модуль xkcd: загрузка комиксов
  44. Сравнение строк в Python

Marketello читают маркетологи из крутых компаний