>>> import abc >>> class Base(abc.ABC): ... @abc.abstractmethod ... def method(self): ... pass ... >>> class SubclassWithNoOverride(Base): ... pass ... >>> class SubclassWithOverride(Base): ... def method(self): ... pass ... >>> class SubclassWithBadOverride(Base): ... def meth0d(self): ... pass ... >>> SubclassWithNoOverride() # I want this to work Traceback (most recent call last): File "", line 1, in TypeError: Can't instantiate abstract class SubclassWithNoOverride with abstract methods method >>> SubclassWithOverride() # I want this to work <__main__.SubclassWithOverride object at 0x7f5fabcae9b0> >>> SubclassWithBadOverride() # I want this not to work Traceback (most recent call last): File "", line 1, in TypeError: Can't instantiate abstract class SubclassWithBadOverride with abstract methods method