Python 3.7+contextlibпонятие
contextlib.AbstractAsyncContextManager
протоколы
Абстрактный базовый класс асинхронного контекстного менеджера (протокол __aenter__/__aexit__, для async with).
Синтаксис
class C(contextlib.AbstractAsyncContextManager): ...
Наследоваться не обязательно: проверка подкласса идёт по наличию __aenter__ и __aexit__, так что любой подходящий класс уже считается подклассом — сам ABC нужен в основном как готовый базовый класс (даёт __aenter__, возвращающий self) и как аннотация типа. Проверка смотрит только на имена методов, а не на то, что они корутины, и не отличает асинхронный менеджер от синхронного по смыслу. Появился в Python 3.7; с 3.9 класс поддерживает параметризацию квадратными скобками.
Примеры
import contextlib
class ACM:
async def __aenter__(self): return self
async def __aexit__(self, *a): return False
print(issubclass(ACM, contextlib.AbstractAsyncContextManager)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности