В чем разница между абстрактным класом и интерфейсом
Python
Middle
Рунити
В чем разница между абстрактным класом и интерфейсом
Ответы
Основные различия между интерфейсом и абстрактным классом в Python:
- **Назначение**:
- Интерфейс определяет только сигнатуры методов (что делать)
- Абстрактный класс может содержать реализацию (как делать)
- **Реализация**:
- В Python интерфейсы реализуются через ABC (Abstract Base Classes) с `@abstractmethod`
- Абстрактный класс может содержать как абстрактные, так и обычные методы
- **Наследование**:
- Класс может реализовывать несколько интерфейсов
- Класс может наследоваться только от одного абстрактного класса
Пример:
```
from abc import ABC, abstractmethod
# Интерфейс
class Flyable(ABC):
@abstractmethod
def fly(self):
pass
# Абстрактный класс
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
def sleep(self):
print("Zzz...")
# Реализация
class Bird(Animal, Flyable):
def make_sound(self):
print("Chirp!")
def fly(self):
print("Flying high")
```