Сообщить об ошибке.

Тип аннотации Protocol() модуля typing в Python

Типизация классов протоколов

Не используется в аннотациях, являются строительным блоком для создания универсальных типов.

Синтаксис:

from typing import Protocol

Protocol(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:
        ...