【发布时间】:2017-11-16 17:37:43
【问题描述】:
我不完全确定如何表达这个问题,因此这个奇怪的标题。搜索后我也找不到任何关于此的信息,所以希望这不是重复的,我只是在搜索错误的单词。无论如何,情况就是这样,我有一个抽象基类,其中包含一些方法,它是由一个类继承的。我不想在这个基类中设置其中一种方法,因为这个类旨在被其他类继承以提供它们都共享的通用功能。比如:
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。如果我不将其声明为抽象,则无法强制子类必须实现该方法。
我希望我写这篇文章的复杂方式对那里的人有意义......
谢谢!
【问题讨论】:
-
这是可行的,但实现起来确实很复杂。底部的答案是得到你需要的东西,祝你好运:)。 stackoverflow.com/questions/25649909/…
标签: python inheritance