Курс 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. Работа с контекстными менеджерами
  2. Создание задания в Cron
  3. Flask — веб-фреймворк Python
  4. Метод join для объединения строк
  5. Метод join() для объединения элементов
  6. Измерение времени выполнения кода с помощью time
  7. Работа с IP-адресами в Python
  8. Конвертация текстовых чисел с помощью Numerizer
  9. Преобразование в float
  10. Множественное наследование в Python
  11. Обработка ошибок в Python
  12. Взаимодействие с sys
  13. Удаление эмодзи с помощью pandas
  14. CSV строка разделение в Python
  15. Логирование в Python
  16. Сериализация объектов в Python
  17. Игра «Угадывание чисел»
  18. Метод eq для сравнения объектов
  19. Методы в Python
  20. Декораторы в Python
  21. Работа со строками
  22. Работа с файлами в Python
  23. Проверка типов с использованием isinstance
  24. Вычисление натуральных логарифмов в NumPy
  25. Отладка регулярных выражений в Python
  26. Преобразование букв в нижний регистр
  27. Метод join для наборов
  28. Создание таблиц в Python с PrettyTable
  29. Обработка исключения UnboundLocalError
  30. Быстрый поиск кода
  31. Функция pow() — возвести число в степень
  32. Combobox в Tkinter
  33. Проверка условий: all и any
  34. Фильтрация элементов с помощью islice
  35. Big O оптимизация
  36. Создание треугольника Паскаля
  37. Запуск внешнего кода в Jupyter
  38. Форматирование чисел в Python
  39. Логирование с Loguru
  40. Python 3.12: переиспользование кавычек
  41. Декораторы в Python
  42. Работа с набором данных CIFAR10 в PyTorch
  43. Модуль subprocess: запуск внешних команд
  44. Форматирование кода на Python
  45. Настройка Cron
  46. Красивый вывод списка
  47. Распаковка аргументов в Python

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