Вопрос проверяет понимание роли абстрактных классов и того, зачем они нужны в архитектуре кода.
Абстрактные базовые классы нельзя использовать напрямую — они задают шаблон для наследников. Они могут содержать абстрактные методы, которые обязательно нужно реализовать. Обычные классы можно создавать и использовать без ограничений. ABC помогают зафиксировать контракт и избежать ошибок на этапе разработки.
Абстрактные базовые классы делают архитектуру более строгой и понятной.
Abstract Base Class (ABC) — класс, который предназначен для наследования и может содержать абстрактные методы без реализации.
ABC:
наследуются от ABC;
могут содержать @abstractmethod;
нельзя инстанцировать напрямую.
from abc import ABC, abstractmethod
class Repository(ABC):
@abstractmethod
def get(self, id: int):
pass
Обычные классы:
можно создавать напрямую;
не требуют реализации методов;
могут использоваться как есть.
class UserService:
def get_user(self, id: int):
return {"id": id}
ABC применяют, когда:
нужно зафиксировать обязательный набор методов;
есть несколько реализаций;
важна архитектурная дисциплина.
ABC отличаются от обычных классов тем, что задают контракт и защищают от некорректных реализаций. Они особенно полезны в больших и долгоживущих проектах.