Введение в абстрактные классы в Python
Иногда класс-родитель нужен только для того, чтобы описать набор методов, обязательных для потомков. Тогда в родителе оставляют методы без реализации и требуют написать их в каждом дочернем классе.
Зачем это нужно: описав все необходимые методы в классе-родителе, мы можем быть уверены в том, что все потомки их действительно реализуют.
Когда это поможет: пусть мы создадим наш класс-родитель и несколько потомков к нему. Если потом через некоторое время, например, через месяц, мы решим создать еще одного потомка, наверняка мы уже забудем детали нашего кода и вполне можем забыть написать реализацию какого-нибудь метода в новом потомке. Однако Python не позволит потерять метод - и просто выдаст ошибку.
To же самое касается другого программиста, работающего с вашим проектом. Пусть код класса-родителя писали вы, а затем ваш коллега решил создать еще одного потомка. У вашего коллеги также не получится потерять парочку методов.
Такой родитель называют абстрактным классом. Объект абстрактного класса создать нельзя. Потомок обязан реализовать все абстрактные методы родителя.
В Python для этого используют класс
ABC из модуля abc и декоратор
@abstractmethod:
from abc import ABC, abstractmethod
class User(ABC):
@abstractmethod
def show(self):
pass
class Employee(User):
def show(self):
return 'employee'