Я понимаю, что в Python мы используем типизацию утки вместо реализации конкретного интерфейса.
Так что если у вас есть функция, которая принимает объект животного, который должен уметь есть и пить, вы можетепросто вызовите .eat()
и .drink()
, и любой передаваемый объект должен просто включать эти методы любым удобным для них способом.
Нет необходимости создавать интерфейс, который каждый реализует при вызове вашей функции.
Но ради документации и новых подсказок типов Python3, есть ли какой-нибудь правильный способ создания интерфейса.
Что-то вроде ...
interface Animal:
eat()
drink()
def foo(a: Animal):
a.eat()
a.drink()
... где интерфейс Animal
предназначен исключительно для документации и неисполненной подсказки типа в функции foo
. Он никогда не используется во время выполнения, и те, кто передают животных в функцию, все еще следуют протоколу утки.
Возможно ли это в Python?