1. 程式人生 > >Python中的super()函式的用法

Python中的super()函式的用法

描述:

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