Что такое протокол в Python

Ответ

В Python протокол — это неформальный интерфейс, который определяет набор методов, необходимых для поддержки определенного поведения. Классу не нужно явно наследовать протокол; достаточно реализовать соответствующие методы. Этот подход известен как утиная типизация (duck typing).

Ключевые примеры протоколов:

  • Протокол итерации: требует методы __iter__ и __next__. Позволяет использовать объект в цикле for.
  • Протокол последовательности: требует методы __len__ и __getitem__.
  • Протокол менеджера контекста: требует методы __enter__ и __exit__. Позволяет использовать объект с конструкцией with.

Пример реализации протокола итерации:

class NumberGenerator:
    def __init__(self, max_num):
        self.max_num = max_num
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.max_num:
            self.current += 1
            return self.current
        else:
            raise StopIteration

# Объект поддерживает протокол итерации, поэтому его можно использовать в цикле
for num in NumberGenerator(3):
    print(num)
# Вывод:
# 1
# 2
# 3

С версии Python 3.8 для статической проверки типов можно использовать typing.Protocol, чтобы формально определять протоколы и проверять их реализацию с помощью инструментов вроде mypy.