Sobes.tech
Junior — Middle
86

Dans quelles situations est-il préférable d'utiliser des protocoles plutôt que des classes de base abstraites lors du développement d'interfaces en Python?

Réponse de l'IA

sobes.tech IA

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

Протоколы позволяют описать набор методов и атрибутов, которые объект должен иметь, но не требуют наследования от конкретного базового класса. Это удобно, если вы хотите, чтобы разные объекты с разной иерархией могли использоваться взаимозаменяемо, если они соответствуют протоколу.

Пример ситуации:

  • Вы пишете функцию, которая работает с любым объектом, у которого есть метод read(). Вместо того, чтобы требовать наследование от абстрактного класса, вы можете определить протокол с методом read() и принимать любые объекты, соответствующие этому протоколу.

Это улучшает совместимость и уменьшает связанность кода.

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

from typing import Protocol

class Readable(Protocol):
    def read(self) -> str:
        ...

def process(reader: Readable):
    data = reader.read()
    print(data)

Здесь любой объект с методом read можно передать в process, даже если он не наследует Readable.