Как реализовать класс, объект которого может работать в менеджере контекста

Нужно реализовать 2 метода:  __enter__ и  __exit__

  • __enter__() — устанавливает контекст и, по желанию, возвращает некоторый объект.
  • __exit__() — очищает объект.
class MyContextManager:

    def __enter__(self):
        print("Entering context")

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Exiting context")

with MyContextManager():
    print("Inside context")

1. with сохраняет метод __exit__ класса File.
2. Следует вызов метода __enter__ класса File.
3. Метод __enter__ открывает файл и возвращает его.
4. Дескриптор файла передается в opened_file.
5. Мы записываем информацию в файл при помощи .write().
6. with вызывает сохраненный __exit__ метод.
7. Метод __exit__ закрывает файл.

Oct. 9, 2023, Источник