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