Python 3.4+abcпонятие
abc.ABC
абстрактные классы
Вспомогательный базовый класс с метаклассом ABCMeta: наследование от него делает класс абстрактным (нельзя создать экземпляр при наличии абстрактных методов).
Синтаксис
class Base(abc.ABC): ...
Абстрактность проверяется только в момент создания экземпляра: если наследник забыл переопределить хотя бы один абстрактный метод, TypeError прилетит на вызове конструктора, а не при определении класса. Само наследование от ABC ничего не запрещает — потомок без абстрактных методов создаётся спокойно. Если нужна проверка «подходит ли объект по набору методов» без наследования, смотрите в сторону typing.Protocol со структурной типизацией.
Примеры
import abc
class Base(abc.ABC):
@abc.abstractmethod
def area(self): ...
try:
Base()
except TypeError:
print('нельзя создать абстрактный') # → нельзя создать абстрактный
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности