ABC и интерфейсы
Python
Senior
Яндекс
Что такое абстрактный базовый класс (`abc.ABC`)? Как вы используете его для задания интерфейсов в приложении, и чем это отличается от duck typing?
Ответы
Абстрактные базовые классы
`abc.ABC` позволяет объявлять абстрактные методы через `@abstractmethod`, которые обязательно должны быть реализованы в подклассах.
Пример:
```python
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def get(self, key: str) -> str: ...
```
ABC задаёт номинальный интерфейс (наследование), duck typing — структурный ("если выглядит как утка, то это утка"). В динамическом Python часто достаточно duck typing, но ABC удобны для явной контрактации и документации.