如何在多重继承上实现抽象类?

How to implement abstract classes over mulitple inheritances?

我有一个关于多级继承的问题。 我正在尝试编写以下形式的 类:

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()

我不打算实例化 A B1B2。 我的问题是,这是否是 python 中解决此问题的正确方法?我想说清楚 Bx 仍然是抽象的 类

很简单。如果 class A 定义了一些抽象方法,那么任何其他继承自 A 的 class 也继承这些方法。不需要重新实现为抽象方法。

在您的情况下,您的 Bx class 只需要 eval() 的专门实现。他们不需要 func() 因为他们已经继承了它们。