[英]Is it necessary to use abc.ABC for each base class in multiple inheritance?
考虑以下代码片段:
import abc
class Base(abc.ABC):
@abc.abstractmethod
def foo(self):
pass
class WithAbstract(Base, abc.ABC):
@abc.abstractmethod
def bar(self):
pass
class WithoutAbstract(Base):
@abc.abstractmethod
def bar(self):
pass
关于上面的代码,我有两个问题:
abc.ABC
继承WithAbstract
,或者仅从Base
继承WithoutAbstract
就足够了? WithAbstract
继承自已经继承自abc.ABC
的Base
,因此您不必再次继承自abc.ABC
。
除非突然间Base
停止从abc.ABC
继承并且您的代码中断。
我不知道 pythonic,但我倾向于避免使用多个 inheritance。的确,它不像其他语言那样有问题,例如 C++,但简单总比复杂好。
如果Base
的所有后代都必须使用@abc.abstractmethod
装饰器,那么最好使它从Base
可用,以避免在创建新子 class 时进行不必要的复制/粘贴。
没有技术需要重新继承ABC
,但一些 linters 可能会抱怨,人们可能会争辩说带有抽象方法的 class 应该显式继承ABC
以明确意图 class 仍然是抽象的,而不是错误的。 这尤其适用于这样的情况,您没有明确声明任何明显的抽象方法:
class C(Base):
def m(self):
...
您只是错过了在这里实现foo
,还是打算将C
保留为抽象 class? 通过继承ABC
使其明确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.