簡體   English   中英

使用ParentClass.method(self,* args,** kwargs)或super(MyClass,self).method(* args,** kwargs)

[英]Using ParentClass.method(self, *args, **kwargs) or super(MyClass, self).method(*args, **kwargs)

當一個類有一個繼承自單個類的類時,調用父方法的首選方法是什么? 我知道有兩種方法可以調用父方法。

選項1:

ParentClass.method(self, *args, **kwargs)

選項2:

super(MyClass, self).method(*args, **kwargs)

在處理多重繼承時,選項1似乎確實很有意義; 我們想要專門調用某個類的方法。 但是在處理單繼承時,無論哪種方式都有效,但選項1可能更加安全。 但有什么(比如PEP)說什么時候使用哪種風格?

首先,如果你有舊式的課程,你需要使用選項1

如果沒有,則取決於代碼:

  • 如果超類(或子類)使用super (或沒有),您可以安全地使用超級。 這也意味着你的subclsses 必須使用super而不是Parent.method(self, ...)
  • 如果超類(或子類)使用舊的Parent.method(self, ...) ,也可以使用它。

http://fuhm.net/super-harmful/上有一個很好的,更冗長的解釋。 簡短摘要(甚至比我上面的解釋還要短):

  • 如果超類必須使用super,則子類必須使用super
  • 超類必須使用super,如果他們的子類做(有時)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM