用法:
class super([type[, object-or-type]])
返回一個代理對象,該對象將方法調用委托給
type
的父類或兄弟類。這對於訪問已在類中重寫的繼承方法很有用。object-or-type
確定要搜索的方法解析順序。搜索從type
之後的類開始。例如,如果
object-or-type
的__mro__
是D -> B -> C -> A -> object
並且type
的值是B
,則super()
搜索C -> A -> object
。object-or-type
的__mro__
屬性列出了getattr()
和super()
使用的方法解析搜索順序。該屬性是動態的,並且可以在更新繼承層次結構時更改。如果省略第二個參數,則返回的超級對象是未綁定的。如果第二個參數是一個對象,
isinstance(obj, type)
必須為真。如果第二個參數是類型,issubclass(type2, type)
必須為真(這對類方法很有用)。super
有兩個典型用例。在具有單繼承的類層次結構中,super
可用於引用父類而不顯式命名它們,從而使代碼更易於維護。這種用法與在其他編程語言中使用super
非常相似。第二個用例是在動態執行環境中支持協作多重繼承。這個用例是 Python 獨有的,在靜態編譯的語言或僅支持單繼承的語言中找不到。這使得實現“diamond diagrams” 成為可能,其中多個基類實現相同的方法。好的設計要求這樣的實現在每種情況下都具有相同的調用簽名(因為調用的順序是在運行時確定的,因為該順序會適應類層次結構的變化,並且因為該順序可以包括在運行前未知的兄弟類)。
對於這兩個用例,典型的超類調用如下所示:
class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg)
除了方法查找,
super()
也適用於屬性查找。一種可能的用例是調用父類或兄弟類中的說明符。請注意,
super()
是作為顯式點屬性查找的綁定過程的一部分實現的,例如super().__getitem__(name)
。它通過實現自己的__getattribute__()
方法來以支持協作多重繼承的可預測順序搜索類來實現這一點。因此,super()
對於使用語句或運算符(例如super()[name]
)的隱式查找未定義。另請注意,除了零參數形式之外,
super()
不限於使用內部方法。兩個參數形式精確地指定參數並進行適當的引用。零參數形式僅適用於類定義,因為編譯器填寫必要的詳細信息以正確檢索正在定義的類,以及訪問普通方法的當前實例。有關如何使用
super()
設計協作類的實用建議,請參閱 guide to using super() 。
相關用法
- Python super()用法及代碼示例
- Python subprocess.run用法及代碼示例
- Python subprocess.Popen用法及代碼示例
- Python subprocess.check_output用法及代碼示例
- Python subprocess.getstatusoutput用法及代碼示例
- Python subprocess.Popen.communicate用法及代碼示例
- Python sum()用法及代碼示例
- Python sklearn.cluster.MiniBatchKMeans用法及代碼示例
- Python scipy.ndimage.binary_opening用法及代碼示例
- Python scipy.signal.windows.tukey用法及代碼示例
- Python scipy.stats.mood用法及代碼示例
- Python str.isidentifier用法及代碼示例
- Python sklearn.metrics.fbeta_score用法及代碼示例
- Python scipy.fft.ihfftn用法及代碼示例
- Python scipy.stats.normaltest用法及代碼示例
- Python scipy.ndimage.convolve1d用法及代碼示例
- Python scipy.stats.arcsine用法及代碼示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代碼示例
- Python scipy.linalg.hadamard用法及代碼示例
- Python socket.create_server用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 super。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。