Есть ли интерфейсы в Python
Python
Middle
Без компании
Есть ли интерфейсы в Python
Ответы
В Python нет явного синтаксиса для интерфейсов как в Java или C#, но их можно реализовать несколькими способами:
- **ABC (Abstract Base Classes)** - наиболее Pythonic способ:
```
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def area(self):
return 3.14 * self.radius**2
```
- **Протоколы (с Python 3.8+)** - структурная типизация:
```
from typing import Protocol
class Drawable(Protocol):
def draw(self) -> None: ...
def render(item: Drawable):
item.draw()
```
- **Duck typing** - неявные интерфейсы:
```
class Duck:
def quack(self):
print("Quack!")
def make_sound(obj):
obj.quack() # Работает с любым объектом, имеющим метод quack()
```
Python предпочитает "утиную типизацию" - если объект ведет себя как интерфейс (имеет нужные методы), он считается реализующим этот интерфейс. ABC и Protocol используются для явного указания контрактов, когда это необходимо.