Python中的super函數理解

高洛峰
發布: 2017-02-18 10:48:10
原創
1218 人瀏覽過

super()函數根據傳進去的兩個參數具體作用如下:

透過第一參數傳進去的類別名稱來決定目前在MRO中的哪個位置。 MRO(Method Resolution Order);

經由第二個參數傳進去的self,決定目前的MRO清單。

def super(cls, inst):
    mro = inst.__class__.mro() #确定当前MRO列表
    return mro[mro.index(cls) + 1] #返回下一个类
登入後複製

如下程式碼:

class A(object):
  def name(self):
    print('name is xiaoming')    #super(A,self).name()class B(object):
  def name(self):
    print('name is cat')class C(A,B):
  def name(self):
    print('name is wang')
    super(C,self).name()if __name__ == '__main__':
  c = C()
  print(c.__class__.__mro__)
  c.name()
登入後複製

執行上述程式碼輸出:當執行C類別下的super()函數時,實際呼叫了A類別下的name函數。 A中註解掉了super()函數,所以並沒有向後繼續執行。並且列印出了當前MRO列表順序為C,A,B,object.

(<class &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wang
name is xiaoming
登入後複製

當我們把A類中的註解去掉後,執行程式碼輸出:可以看到,當A執行後繼續執行了B中的name ()函數。如果B中仍有super函數則會繼續往上去尋找object中是否有name()函數。

(<class &#39;__main__.C&#39;>, <class &#39;__main__.A&#39;>, <class &#39;__main__.B&#39;>, <class &#39;object&#39;>)name is wang
name is xiaoming
name is cat
登入後複製


更多Python中的super函數理解相關文章請關注PHP中文網!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板