Как реализовать класс, объект которого может работать в менеджере контекста
Нужно реализовать 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, Источник