簡體   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