Курс 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. Функция findall() для поиска вхождений строки
  2. Обмен значений переменных в Python
  3. Асинхронное программирование с asyncio
  4. Декораторы в Python
  5. Функция zip() в Python
  6. Роль запятой в Python
  7. Операторы присваивания в Python
  8. globals и locals
  9. Объединение Python и Shell
  10. Оператор @ для умножения матриц
  11. Enum в Python: создание и использование перечислений
  12. Создание копии списка в Python
  13. Создание и обучение модели с Keras
  14. Модуль os: работа с файлами и папками
  15. Пропуск начальных строк с помощью dropwhile()
  16. Модуль antigravity: генерация координат
  17. Метод join() для объединения строк
  18. Нан-рефлексивность в Python
  19. Объединение строк с помощью метода join
  20. Перевод двоичного кода в целое число
  21. Оператор del в Python
  22. Декораторы в Python
  23. Генераторы в Python
  24. Реверс строки и списка в Python.
  25. Работа с файлами в Python
  26. Путь к интерпретатору Python
  27. Значения по умолчанию в Python
  28. Присоединение элементов коллекции
  29. Отображение HTML кода в Python
  30. Получение имени функции с помощью inspect
  31. Оператор «is not» в Python
  32. Оптимизация памяти с __slots__
  33. Экспорт данных с помощью writefile
  34. Функции-генераторы в Python
  35. Сравнение def и lambda-функций
  36. Печать в одной строке
  37. Удаление и повторная вставка ключа в OrderedDict
  38. UserString в Python
  39. Переменная с нижним подчеркиванием
  40. Хешируемые ключи в Python
  41. Преобразование строк в числа в Python
  42. Измерение времени выполнения с помощью time
  43. Перезагрузка оператора в Python
  44. Копирование файлов с shutil()

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