Курс 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. Использование двоеточия в Python
  3. Декоратор @override
  4. Сортировка HTML по CSS-селектору
  5. Работа с необработанными строками
  6. Поиск самого длинного слова в списке с использованием max()
  7. Создание словарей с defaultdict()
  8. Удаление элементов из списка
  9. Вложенные генераторы в Python
  10. Очистка списка от False, None, 0, «»
  11. Создание файла с проверкой ошибки
  12. Обработка ошибок ввода данных
  13. Определение наиболее частого элемента с помощью collections.Counter
  14. Создание тестовых данных с Faker
  15. Принципы программирования
  16. Использование defaultdict в Python
  17. Библиотека wikipedia для Python
  18. Метод rsub для пользовательских чисел
  19. Обновление множества в Python
  20. Конвертация коллекций в Python
  21. Курс по дообучению ChatGPT
  22. Проверка типов с помощью isinstance
  23. Списки в Python
  24. Передача словаря через **kwargs
  25. Генераторные функции в Python
  26. Метод join() для объединения элементов
  27. Вывод символов строки в Python
  28. Обновление ключей в Python
  29. Работа с Path в Python
  30. Работа с enumerate()
  31. Протокол управления контекстом
  32. Преобразование Excel в PDF с Spire.XLS
  33. Модуль Operator в Python
  34. Типы возвращаемых значений в Python
  35. Непрерывная проверка в Python
  36. Вставка переменных в шаблоны Flask
  37. Разделение функций на этапы
  38. Путь к интерпретатору Python
  39. Работа с Telegram API на Python
  40. Сортировка элементов в Python
  41. Декораторы в Python
  42. Pretty-printing JSON в Python
  43. Модуль xkcd: добавление юмора в Python
  44. Инициализация объекта
  45. Множественные конструкторы в Python
  46. GitHub в Telegram: подписка на уведомления

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