Курс 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. Оператор Walrus в Python
  2. Работа с библиотекой xkcd
  3. Создание коллекций из генератора
  4. Работа со стеком в Python
  5. Применение функции к элементам списка
  6. JMESPath в Python
  7. Работа с множествами в Python
  8. Проверка кортежей.
  9. Преобразование текста в нижний регистр
  10. Область видимости переменных в Python
  11. Работа с кортежами в Python
  12. Работа с часовыми поясами в Python
  13. Вычисление разности множеств в Python
  14. Разбиение текста в Python
  15. Работа с датами в Python
  16. Класс Counter() для подсчета элементов
  17. Работа с аргументами командной строки
  18. Функция __init__ в Python
  19. Переопределение унарных операторов
  20. Удаление элемента из списка в Python
  21. Отладка кода
  22. Получение идентификатора объекта в памяти
  23. Работа с процессами в Python
  24. Декораторы классов
  25. Утечки переменных цикла в Python 3.x
  26. Обмен значений переменных в Python
  27. Преобразование списков в словарь
  28. Python Метод sleep() времени
  29. Лямбда-функции для min/max
  30. Поиск с помощью регулярных выражений
  31. Python-dateutil — работа с датами
  32. Создание уникального проекта
  33. Работа с набором данных CIFAR10 в PyTorch
  34. Пространство имен в Python
  35. Сортировка элементов с OrderedDict
  36. Преобразование числа в восьмеричную строку
  37. Работа с модулем bisect
  38. Применение функции к списку
  39. Измерение времени выполнения кода с использованием time
  40. Форматирование даты с strftime()
  41. Функция product() из itertools
  42. Преобразование документов в PDF с помощью Spire.Office
  43. Метод ior для битовых операций
  44. Метод rxor для операции побитового исключающего «или»

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