所屬**分類: python高階 > 物件導向
有什麼區別?
class child(somebaseclass):和def __init__(self):
super(child, self).__init__()
class child(somebaseclass):我們已經看到super在只有單繼承的類中使用了很多,但也可以在多重繼承中使用它,那麼在這種情況下使用它的優點是什麼?def __init__(self):
somebaseclass.__init__(self)
somebaseclass.__init__(self)意味著呼叫somebaseclass的__init__。而
super(child, self).__init__()表示__init__從child例項的方法解析順序(mro)中的父類呼叫繫結。
如果例項是child的子類,則mro中可能會有另乙個父級。
我玩了一下super(),並且認識到我們可以改變呼叫順序。
a在這種情況下,d的mro將是(僅適用於python 3):/ \b c
\ /d
in [26]: d.__mro__讓我們建立乙個super()執行後呼叫的類。out[26]: (__main__.d, __main__.b, __main__.c, __main__.a, object)
in [23]: class a(object): # or with python 3 can define class a:因此我們可以看到解決方案順序與mro中的相同。但是當我們super()在方法的開頭呼叫時:...: def __init__(self):
...: print("i'm from a")
...:
...: class b(a):
...: def __init__(self):
...: print("i'm from b")
...: super().__init__()
...:
...: class c(a):
...: def __init__(self):
...: print("i'm from c")
...: super().__init__()
...:
...: class d(b, c):
...: def __init__(self):
...: print("i'm from d")
...: super().__init__()
...: d = d()
...:
i'm from d
i'm from b
i'm from c
i'm from a
a/ ⇖
b ⇒ c
⇖ /d
in [21]: class a(object): # or class a:我們有乙個不同的順序,它顛倒了mro元組的順序。...: def __init__(self):
...: print("i'm from a")
...:
...: class b(a):
...: def __init__(self):
...: super().__init__() # or super(b, self).__init_()
...: print("i'm from b")
...:
...: class c(a):
...: def __init__(self):
...: super().__init__()
...: print("i'm from c")
...:
...: class d(b, c):
...: def __init__(self):
...: super().__init__()
...: print("i'm from d")
...: d = d()
...:
i'm from a
i'm from c
i'm from b
i'm from d
a/ ⇘b ⇐ c
⇘ /d
python基本操作 super
一 單繼承 只繼承乙個父類,父類沒有繼承其他父類 classa object def init self print i am class a class c a def init self super c,self init print yes super c,self init 這句話的解釋是 ...
python深坑集錦 super
一 前言 python 物件導向中有繼承這個概念,初學時感覺很牛逼,裡面也有個super類,經常見到,最近做一些題才算是理解了。特地記錄分享給後來研究的小夥伴,畢竟現在小學生都開始學了 滑稽臉 二 直接上乾貨,能把下面乙個問題全答對,後面就不用看了。class a def go self print...
Python中super的用法
super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序 mro 重複呼叫 鑽石繼承 等種種問題。總之前人留下的經驗就是 保持一致性。要不全部用類名呼叫父類,要不就全部用 super,不要一半一半。普通繼承 python view p...