Курс 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. Оператор «not» в Python
  2. Магические методы в Python
  3. Замена символов в Python
  4. Хеширование паролей с использованием salt
  5. Функция enumerate() в Python
  6. Расширение операции побитового «и» в Python
  7. Генерация UUID в Python
  8. Поиск с помощью регулярных выражений
  9. Метод __index__ в Python
  10. Создание циклической ссылки
  11. Декораторы в Python
  12. Рациональные числа в Python
  13. Функции в Python
  14. Преобразование чисел в восьмеричную строку
  15. Основные операции с Numpy
  16. Операторы сравнения в Python
  17. Удаление URL-адресов в Python
  18. Оптимизация памяти с __slots__
  19. Протокол управления контекстом
  20. Оператор in в Python
  21. Функция enumerate() в Python
  22. Работа с PosixPath() в Python
  23. Работа с географическими данными.
  24. Работа с библиотекой requests
  25. Генераторы в Python
  26. Поиск подстроки в строке
  27. Хранение переменных в словаре.
  28. Проверка файла .py на синтаксис.
  29. Руководство по библиотеке pydantic
  30. Атрибуты класса и экземпляра
  31. Замер времени выполнения кода
  32. Изменяемые и неизменяемые объекты
  33. Работа с YAML в Python
  34. Освобождение памяти в Python
  35. Создание пустых функций и классов в Python
  36. Деление в Python
  37. Перевод двоичного кода в целое число
  38. Получение идентификатора объекта в памяти
  39. Проекты на Python
  40. Операции с кортежами
  41. Функция zip() в Python
  42. Измерение времени выполнения кода
  43. Объединение словарей в Python
  44. Оператор in для проверки наличия элемента

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