如何在多重继承上实现抽象类?
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
B1
或 B2
。
我的问题是,这是否是 python 中解决此问题的正确方法?我想说清楚 Bx
仍然是抽象的 类
很简单。如果 class A
定义了一些抽象方法,那么任何其他继承自 A
的 class 也继承这些方法。不需要重新实现为抽象方法。
在您的情况下,您的 Bx
class 只需要 eval()
的专门实现。他们不需要 func()
因为他们已经继承了它们。
我有一个关于多级继承的问题。 我正在尝试编写以下形式的 类:
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
B1
或 B2
。
我的问题是,这是否是 python 中解决此问题的正确方法?我想说清楚 Bx
仍然是抽象的 类
很简单。如果 class A
定义了一些抽象方法,那么任何其他继承自 A
的 class 也继承这些方法。不需要重新实现为抽象方法。
在您的情况下,您的 Bx
class 只需要 eval()
的专门实现。他们不需要 func()
因为他们已经继承了它们。