Что такое Protocol и чем отличается от ABC?

Senior
279 просмотров
AFK Offer AI

Protocol (typing.Protocol) — структурная типизация. Класс совместим с Protocol, если имеет нужные методы, без наследования. ABC — номинальная: нужно явно наследоваться. Protocol — duck typing с проверкой mypy. class Drawable(Protocol): def draw(self) -> None: .... Любой класс с методом draw() автоматически Drawable. runtime_checkable делает isinstance работающим. Protocol лучше для библиотек — не навязываешь наследование. ABC лучше когда нужен контракт внутри проекта. Protocol появился в Python 3.8 (PEP 544).

Следующий вопрос

Как работает mypy?