Менеджер контекстов with
Я не понимаю, что такое контекст with ... as в python. Я знаю несколько паттернов, в рамках которых его можно использовать. При этом, я не понимаю тонкостей этой конструкции. В качестве ответа на вопрос я бы хотел увидеть, как контекст with ... as выражается в базовых конструкциях в python (т.е. можно ли его реализовать через циклы, функции, условия, присваивания и т.п.).
Другим вариантом ответа на вопрос будет описание проблемы, которую решает with ... as.
Приведу пример: декоратор -- это функция, которая возвращает функцию. Сказав эту фразу, можно легко воспроизвести "нативный декоратор". С контекстом я такой интерпретации не знаю.
Ответы (1 шт):
class MyClass:
def __enter__(self):
# Некий инициализирующий код
return self
def __exit__(self, *args, **kwargs):
# Некий зачищающий код
# Теперь можно писать так
with MyClass() as obj: # Вызывает MyClass.__enter__()
# Контекст где obj существует
# Действия с объектом
# Выход из контекста. Вызывает MyClass.__exit__()
# obj был удалён автоматом
Использование менеджера контекста делает код более безопасным, тем что он сам удаляет объекты при выходе из контекста, исключая человеческий фактор.