Python Glossary English

Python 3.6+contextlibпонятие

contextlib.AbstractContextManager

протоколы

Абстрактный базовый класс контекстного менеджера (протокол __enter__/__exit__); любой класс с этими методами — его виртуальный подкласс.

Синтаксис

class C(contextlib.AbstractContextManager): ...

Это не обязанность, а удобство: issubclass проходит для любого класса с __enter__ и __exit__, даже если он ничего не наследовал, — поэтому свой менеджер писать через наследование не нужно. Смысл наследования в том, что базовый класс уже даёт __enter__, возвращающий self, и остаётся описать только __exit__; ещё его удобно указывать в аннотациях типов. Асинхронные менеджеры сюда не попадают — у них отдельный AbstractAsyncContextManager.

Примеры

import contextlib
class CM:
    def __enter__(self): return self
    def __exit__(self, *a): return False
print(issubclass(CM, contextlib.AbstractContextManager))   # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности