Вопрос проверяет понимание механизма абстрактных классов и того, как Python запрещает создание некорректных наследников.
Если наследник не реализует все абстрактные методы, он сам остается абстрактным классом.
Экземпляр такого класса создать нельзя.
При попытке создать объект Python выбросит TypeError.
Это защищает код от использования неполной или некорректной реализации интерфейса.
Абстрактные классы в Python используются как контракты, которые наследники обязаны выполнить.
Абстрактный метод — это метод, объявленный в базовом классе, который обязан быть реализован в наследнике.
В Python абстрактные классы обычно создаются через модуль abc.
from abc import ABC, abstractmethod
class Storage(ABC):
@abstractmethod
def save(self, data):
pass
Здесь save — обязательный метод.
class FileStorage(Storage):
pass
FileStorage() # TypeError
Класс FileStorage существует
Но он считается абстрактным
Попытка создать экземпляр приводит к:
TypeError: Can't instantiate abstract class FileStorage
class FileStorage(Storage):
def save(self, data):
print("saved")
fs = FileStorage() # OK
Гарантировать, что все реализации поддерживают нужный интерфейс
Избежать ошибок времени выполнения из-за “забытых” методов
Чётко зафиксировать ожидания от наследников
Если абстрактный метод не реализован, класс нельзя использовать как полноценную реализацию — Python остановит это на этапе создания объекта.