Менеджер контекстов with

Я не понимаю, что такое контекст with ... as в python. Я знаю несколько паттернов, в рамках которых его можно использовать. При этом, я не понимаю тонкостей этой конструкции. В качестве ответа на вопрос я бы хотел увидеть, как контекст with ... as выражается в базовых конструкциях в python (т.е. можно ли его реализовать через циклы, функции, условия, присваивания и т.п.).

Другим вариантом ответа на вопрос будет описание проблемы, которую решает with ... as.

Приведу пример: декоратор -- это функция, которая возвращает функцию. Сказав эту фразу, можно легко воспроизвести "нативный декоратор". С контекстом я такой интерпретации не знаю.


Ответы (1 шт):

Автор решения: NEWME0
class MyClass:
    def __enter__(self):
        # Некий инициализирующий код
        return self

    def __exit__(self, *args, **kwargs):
        # Некий зачищающий код

# Теперь можно писать так
with MyClass() as obj:   # Вызывает MyClass.__enter__()
    # Контекст где obj существует
    # Действия с объектом

# Выход из контекста. Вызывает MyClass.__exit__()
# obj был удалён автоматом

Использование менеджера контекста делает код более безопасным, тем что он сам удаляет объекты при выходе из контекста, исключая человеческий фактор.

→ Ссылка