Протоколы в Python

Введение

Набор операций, которые тип должен поддерживать для того чтобы создать протокол

Не должен быть определён как интерфейс или base class

Типы должны предоставлять функционирующую реализацию

Протокол Коллекции, в которых он применён
Container str, list, dict, range, tuple, set, bytes
Sized str, list, dict, range, tuple, set, bytes
Iterable str, list, dict, range, tuple, set, bytes
Sequence str, list, dict, tuple, bytes
Mutable Sequence list
Mutable Set set
Mutable Mapping dict

Контейнер должен поддерживать in и not in

item in container item not in container

Sized должен поддерживать len()

len(container)

Iteration должен уметь отдавать (yield) свои элементы по одному по запросу.

Например, их можно перебирать с помощью цикла for

for item in iterable: print(item)

Sequence должен поддерживать обращение к элементу по его индексу, нахождение индекса элемента, подсчёт числа элементов и построение обратной последовательности. Также все объекты, которые поддерживают протокол Sequence должны поддерживать Iterable, Sized и Container.

item = sequence[index] i = sequence.index(item) num = sequence.count(item) r = reversed(sequence)

Автор статьи: Андрей Олегович