Существует ограниченная версия этого класса протокола ( PEP , docs ), однако он поддерживает только переменные типа (Protocol[T]
) и конкретные типы (class MyProtocol(FunctionType, Protocol)
), но не общие типы, такие как Any, Union, Callable, Iterator и др. c. Итак, примерный случай в вопросе может быть реализован как
class FooAndBar(Foo, Bar, typing.Protocol): ...
, но вариант использования, упомянутый ниже, кажется невозможным ( может быть возможно в конечном итоге ), поэтому сейчас я бы либо определите протокол только с теми членами, которые вам нужны, используйте строку в качестве подсказки типа или укажите это в строке документации.
Дополнительное примечание: если вы используете IntelliJ IDE, вы можете написать
assert isinstance(param, (Foo, Bar))
, который в целях проверки типа даст тот же результат, что и гипотетический param: Intersection[Foo, Bar]
в любом последующем коде.