Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Мне кажется, стоит посмотреть на концепцию интерфейсов в Java, например. Эти протоколы очень их напоминают.
Допустим, есть класс Klass, который реализует "протоколы" A, B и С.
Если я хочу чтобы моя функция принимала объекты протоколов A и B мне придется объявить новый протокол AB? Будет ли объект класса Klass ему соответствовать?
Может быть было бы удобнее указывать список протоколов в типе аргумента?
from typing import Iterable, Hashable
class HashableFloats(Iterable[float], Hashable, Protocol):
pass
def cached_func(args: HashableFloats) -> float:
...
cached_func((1, 2, 3)) # OK, tuple is both hashable and iterable
Я бы скорее обратился к интерфейсам как они определены у Банды Четырех. Протоколы как раз им полностью соответствуют.
Протоколы в Python: утиная типизация по-новому