Курс 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 с PrettyTable
  2. None в Python: использование и особенности
  3. Работа с itertools
  4. Оператор == в Python
  5. Оформление кода по PEP 8
  6. UserList в Python: Описание и примеры использования
  7. Создание и обучение модели с Keras
  8. Транспонирование 2D-массива с помощью zip
  9. Хранение переменных в словаре.
  10. Поиск наиболее частого элемента в списке
  11. Создание комплексных чисел
  12. Игра «Угадывание чисел»
  13. Работа с временем в Python
  14. Удаление файлов с shutil.os.remove()
  15. Создание словаря через dict comprehension
  16. Представление бесконечности в Python
  17. Поиск подстроки в строке
  18. Генераторы в Python
  19. Получение списка файлов в директории с использованием os
  20. Создание вложенного генератора
  21. Работа с timedelta в Python
  22. Взаимодействие с внешними процессами в Python
  23. Создание уникального множества
  24. Тип данных TypeVarTuple
  25. Оператор деления для класса Rational
  26. Проекты на Python
  27. Python enumerate() использование
  28. Оптимизация памяти с __slots__
  29. Декораторы в Python
  30. Подсказки типов в Python
  31. Lambda Functions in Python
  32. Удаление элементов из списка
  33. Проверка версии Python
  34. Безопасный доступ к значениям словаря
  35. Разработка Telegram-ботов
  36. Объединение словарей в Python
  37. Магические методы в Python
  38. Python: цикл for и оператор присваивания
  39. Установка виртуального окружения Python
  40. Вывод букв строки в Python
  41. Сериализация данных в JSON с помощью json.dumps
  42. Протокол управления контекстом
  43. Python UserString — создание подклассов строк

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