Python3 - How does one define an abstract subclass from an existing abstract class? Python3 - How does one define an abstract subclass from an existing abstract class? python-3.x python-3.x

Python3 - How does one define an abstract subclass from an existing abstract class?


Just subclass, you don't need to do anything special.

A class only becomes concrete when there are no more abstractmethod and abstractproperty objects left in the implementation.

Let's illustrate this:

from abc import ABC, abstractmethod    class Primitive(ABC):    @abstractmethod    def foo(self):        pass    @abstractmethod    def bar(self):        passclass InstrumentName(Primitive):    def foo(self):        return 'Foo implementation'

Here, InstrumentName is still abstract, because bar is left as an abstractmethod. You can't create an instance of that subclass:

>>> InstrumentName()Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: Can't instantiate abstract class InstrumentName with abstract methods bar

Subclasses can also add @abstractmethod or @abstractproperty methods as needed.

Under the hood, all subclasses inherit the ABCMeta metaclass that enforces this, and it simply checks if there are any @abstractmethod or @abstractproperty attributes left on the class.


As @MartijnPieters wrote, you don't need to do anything special for Python, but PyCharm will warn:

Class InstrumentName must implement all abstract methods

One way to suppress that warning:

import abcclass Primitive(abc.ABC):    @abc.abstractmethod    def foo(self):        pass# noinspection PyAbstractClassclass InstrumentName(Primitive):    def is_tuba(self):        return False

Another way:

...class InstrumentName(Primitive, metaclass=abc.ABCMeta):    def is_tuba(self):        return False