繁体   English   中英

是否有必要对多个inheritance中的每个基数class使用abc.ABC?

[英]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

关于上面的代码,我有两个问题:

  1. 是否也有必要从abc.ABC继承WithAbstract ,或者仅从Base继承WithoutAbstract就足够了?
  2. Pythonic 的处理方式是什么? 最佳做法是什么?

WithAbstract继承自已经继承自abc.ABCBase ,因此您不必再次继承自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM