我不太确定如何表达这个问题,因此使用了奇怪的标题。我在搜索后也没有找到有关此事的任何信息,因此希望这不是重复的内容,只是我所搜索的词汇不正确。无论如何,这就是情况,我有一个抽象的基类,在其中有一些方法,这些方法被一个类继承。我不想设置此基类中的其中一个方法,因为该类旨在被其他类继承,以提供它们都共享的常见功能。类似于:
class A(metaclass=abc.ABCMeta):
@abc.abstractmethod
def fun1(self):
pass
@abc.abstractmethod
def fun2(self):
pass
class B(A):
def fun1(self):
#do work here
@abc.abstractmethod
def fun2(self): # Intent to have the final classes define this
pass
class C(B):
def fun2(self):
# do work here
class D(B):
def fun2(self):
# do work here
我希望将函数作为ABC.meta保留,以强制在最终子类中进行实现。但是因为在这种情况下可以有多种类型的B类,所有这些类都从接口继承而来,所以我想在根类中保留方法的初始虚拟化,但是有一种方式可以让B类强制其子类必须实现它。如果我不向B类添加抽象方法,则代码就可以正常工作,但那很尴尬,因为子类必须实现该方法,并且不应该一直查找接口以找出他们需要实现的所有内容。如写入,它会因为B类无法将该方法声明为abc.abstract而产生错误。如果不将其声明为抽象,则无法强制实现该方法的子类。
我希望我的复杂表述能够使某个人感到有意义。
谢谢!