14 / 22
Что такое context manager и как написать свой через `__enter__`/`__exit__` или `@contextmanager`?
Context manager — объект, реализующий протокол __enter__/__exit__, чтобы гарантировать очистку ресурса (файл, соединение, lock) даже при исключении. Используется через with. Декоратор @contextlib.contextmanager превращает обычную функцию-генератор с одним yield в context manager. ExitStack позволяет динамически собирать стек менеджеров и корректно их разворачивать.