Курс 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. Методы shutil для работы с файлами
  2. Big O оптимизация
  3. Кортежи в Python: особенности и преимущества
  4. Резервирование символов в Python
  5. Генераторы данных
  6. Карта бомбоубежищ в Москве и Питере
  7. Работа с GitHub в Telegram
  8. Функция zip() в Python
  9. Создание списка дат
  10. Codecademy в Telegram
  11. Динамические маршруты во Flask
  12. Транспонирование матрицы в Python
  13. Поиск частого элемента
  14. Множественное присваивание в Python
  15. Автоматизация действий с Pyautogui
  16. JMESPath в Python
  17. Работа с итераторами через срезы
  18. Переопределение метода delitem в Python
  19. Наследование в программировании
  20. Преобразование range в итератор
  21. Получение обратного списка чисел
  22. Тестирование времени с Freezegun
  23. Объединение списков в строку
  24. Форматирование строк с % в Python
  25. Переопределение метода __or__()
  26. Преобразование в float
  27. Генераторы в Python
  28. Преобразование кортежа в словарь.
  29. Асинхронное выполнение задач в Python
  30. Метод Enumerate() для списков
  31. Вычисление фазы комплексного числа
  32. Лямбда-функции в Python
  33. Хеши в Python
  34. Работа с массивами в Numpy
  35. Проверка кортежей.
  36. Создание и использование модулей в Python
  37. Гибкие функции Python
  38. Синтаксис переменных цикла в Python
  39. Метод join для объединения строк
  40. Структура данных словарь в Python
  41. Оператор распаковки в Python
  42. Модуль os в Python: работа с файлами
  43. Разработка игры Pong с turtle
  44. Выход из профиля в Django
  45. Многострочные комментарии в Python
  46. Сортировка в Python

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