How to implement abstract classes over mulitple inheritances?

  abc, class, python, python-3.x

I have a question on multi level inheritance.
I am trying to write classes of the form:

from abc import ABC, abstractmethod
import numpy as np

### Parent class
class A(ABC):
  @abstractmethod
  def eval(self, x: np.ndarray) -> np.ndarray:
    pass

  @abstractmethod
  def func(self, x: np.ndarray) -> None:
    pass

### 1. Inheritance
class B1(A):
  def eval(self, x: np.ndarray) -> np.ndarray:
    #do something here
    return np.zeros(5)

  @abstractmethod
  def func(self, x: np.ndarray) -> None:
    pass

class B2(A):
  def eval(self, x: np.ndarray) -> np.ndarray:
    #do something different here
    return np.zeros(10)

  @abstractmethod
  def func(self, x: np.ndarray) -> None:
    pass

### 2. Inheritance
class C1(B1):
  def func(self, x: np.ndarray) -> None:
    print('child1.1')

class C2(B1):
  def func(self, x: np.ndarray) -> None:
    print('child1.2')

class C3(B2):
  def func(self, x: np.ndarray) -> None:
    print('child2.1')

c1 = C1()
c2 = C2()
c3 = C3()

I am not planning on instantiating A B1 or B2.
My question is, if this is the correct way to go about this in python? I want to make it clear that Bx are still abstract classes

Source: Python-3x Questions

LEAVE A COMMENT