Skip to content
14 / 22

Что такое context manager и как написать свой через `__enter__`/`__exit__` или `@contextmanager`?

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

Что такое context manager и как написать свой через `__enter__`/`__exit__` или `@contextmanager`? | JScriptiser