Протоколы в 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)