Курс 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. Подсчет вхождений элементов
  3. Декораторы с аргументами
  4. Функция enumerate в Python
  5. Настройка вывода NumPy
  6. Работа с NumPy
  7. Многострочные комментарии в Python
  8. JMESPath в Python
  9. Обход элементов в Python
  10. Метод setitem в Python
  11. Форматирование строк в Python
  12. Вызов внешних программ в Python с помощью sh
  13. Функция divmod() в Python
  14. Метод join() для объединения элементов в строку.
  15. Избегайте двойного подчеркивания
  16. Рекурсия для обращения строки
  17. Подсказки при вводе данных в Python
  18. Отправка POST-запроса в REST API
  19. Поиск индексов подстроки
  20. Обработка исключений в Python
  21. Генераторы в Python
  22. Установка пакетов с помощью pip
  23. Создание и удаление объектов
  24. Лямбда-функции в Python
  25. Разработка игры Pong с turtle
  26. Просмотр внешних файлов в %pycat
  27. Python reversed() vs срез[::-1]
  28. Чтение и запись TOML-конфигов
  29. Итераторы с потерямиZIP
  30. Списки в Python
  31. Создание словарей с defaultdict()
  32. Создание виртуальной среды
  33. Форматирование строк с f-строками
  34. Модуль subprocess: запуск внешних команд
  35. Курс по дообучению ChatGPT
  36. Преобразование чисел в слова
  37. Резервирование символов в Python
  38. Работа с OpenCV
  39. Расчет времени выполнения
  40. Обезопасьте ввод данных
  41. Операторы присваивания в Python
  42. Генерация случайных чисел Python
  43. Многострочные строки в Python
  44. Условные выражения в Python
  45. Распаковка с оператором *

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