from abc import abstractmethod, ABCMeta class A: @abstractmethod def foo(self): ... class AbstractClassA(metaclass=ABCMeta): ... class AbstractClassB(AbstractClassA): @abstractmethod def foo(self): ... class AbstractClassC(AbstractClassB): @abstractmethod def bar(self): ... class AbstractClassD(AbstractClassC): def foo(self): ... def bar(self): ... @abstractmethod def buz(self): ...