Python中的super()函式的用法
阿新 • • 發佈:2018-12-12
描述:
super()函式是用於呼叫下一個父類(超類、基類)並返回該父類例項的一個方法。
super()函式是用來解決多重繼承問題的,直接用類名呼叫父類方法使用單繼承的時候沒有問題,但是如果使用多重繼承時會涉及查詢順序(method resolution order MRO)、重複呼叫(鑽石繼承)等問題。
MRO就是了ide方法解析順序,其實就是繼承父類方法時的順序表。
語法:
super(type[, object-or-self])
引數:
- type —— ——類
- object-or-type —— —— 類,一般是self
例項:
1.使用super()來呼叫父類(單個父類),可以繼承父類的方法也可以有自己新的方法
class A(object):
def __init__(self):
print("enter A")
print("leave A")
class B(A):
def __init__(self):
print("enter B")
super(B, self).__init__()
print("leave B")
>>>b = B()
enter B
enter A
leave A
leave B
2.使用super()來進行多重呼叫,也就是呼叫多個父類
class A(object): def __init__(self): print("enter A") print("leave A") class B(A): def __init__(self): print("enter B") super(B,self).__init__() print("leave B") class C(A): def __init__(self): print("enter C") super(C,self).__init__() print("leave C") class D(B,C): def __init__(self): print("enter D") super(D,self).__init__() print("leave D") >>> d = D() enter D enter B enter C enter A leave A leave C leave B leave D
3.這是一種通過父類呼叫的方法很常用,比較直觀,但效果還是和super有差異的。來看下面的例子
class B(A): def __init__(self): print "enter B" A.__init__(self) print "leave B" class C(A): def __init__(self): print "enter C" A.__init__(self) print "leave C" class D(B,C): def __init__(self): print "enter D" B.__init__(self) C.__init__(self) print "leave D" >>> d=D()enter D enter B enter A leave A leave B enter C enter A leave A leave C leave D