Static Protocols — это способ описывать типы через поведение, а не через иерархию классов.
Вместо проверки isinstance или наследования от абстрактных базовых классов, мы говорим: если объект умеет делать нужное — он подходит.
➡️ Это особенно полезно в реальных проектах, где наследование быстро приводит к жёсткой связанности и сложным деревьям классов. Протоколы позволяют писать код, который остаётся гибким и при этом безопасным: статические анализаторы вроде mypy, pyright или ty проверяют совместимость ещё до запуска программы.
➡️ В отличие от обычного duck typing, static protocols работают на этапе разработки. IDE подсказывает ошибки в сигнатурах методов, автодополнение становится точнее, а несовместимые объекты отсекаются заранее. При этом код остаётся простым и не требует изменений существующих классов.
➡️ На практике это отлично ложится на ML-пайплайны, API и плагины. Например, разные модели могут реализовывать одно и то же поведение (`predict`, `predict_top_k`) без общего базового класса. Один разработчик пишет функциональный код, другой — объектно-ориентированный, а всё продолжает работать вместе.
➡️ Важно помнить, что static protocols не проверяются на runtime, если специально не включать @runtime_checkable. Их задача — помочь проектировать систему и ловить ошибки раньше, а не валидировать данные в продакшене.
👉 Подробно, с примерами и нюансами — в статье
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
