Не используется в аннотациях, являются строительным блоком для создания универсальных типов.
from typing import Protocol Protocol(Generic)
Generic
- универсальный тип.Тип аннотации Protocol()
модуля typing
представляет собой базовый класс для классов протокола.
Классы протокола определяются следующим образом:
class Proto(Protocol): def meth(self) -> int: ...
Такие классы в основном используются со средствами проверки типизации, которые распознают структурные подтипы (статическая утиная типизация), например:
class C: def meth(self) -> int: return 0 def func(x: Proto) -> int: return x.meth() func(C()) # Проходит проверку статического типа
Классы протоколов, декорируются @runtime_checkable()
, действуют как простые протоколы времени выполнения, которые проверяют только наличие заданных атрибутов, игнорируя их сигнатуры типов.
Классы протоколов могут быть общими, например:
class GenProto(Protocol[T]): def meth(self) -> T: ...