一、super函數的基本用法
在Python中,每一個類都有一個父類,通過繼承機制,子類可以使用父類的屬性和方法。當子類與父類的方法名字相同時,我們需要調用父類的方法時,就需要使用super函數。
class Parent(object):
def some_method(self):
print("父類方法執行")
class Child(Parent):
def some_method(self):
super().some_method() # 調用父類方法
print("子類方法執行")
Child().some_method() # 執行子類方法
在上面的代碼中,我們定義了一個父類和一個子類,子類繼承自父類。在子類的some_method方法中,通過super()可以調用到父類的some_method方法。輸出結果為:
父類方法執行
子類方法執行
可以看到,在子類的some_method方法中,調用了父類的some_method方法,而且輸出結果是先執行父類方法再執行子類方法。
二、super函數的多重繼承場景
在Python中,支持多重繼承。即一個子類可以同時繼承多個類。如:
class A(object):
def some_method(self):
print("A類方法執行")
class B(object):
def some_method(self):
print("B類方法執行")
class Child(A, B):
def some_method(self):
super(Child, self).some_method()
print("子類方法執行")
Child().some_method()
在上面的代碼中,我們定義了三個類,子類繼承自A和B類。在子類的some_method方法中,我們使用了super函數調用了A類的方法。輸出結果為:
A類方法執行
子類方法執行
可以看到,通過super函數可以很方便地實現多重繼承中父類方法的調用。
三、super函數與__init__方法的結合使用
在Python中,__init__方法常常被用來初始化對象的屬性。在子類中重寫__init__方法時,如果要使用父類的初始化方法,就需要使用super函數。如:
class Parent(object):
def __init__(self, name):
self.name = name
class Child(Parent):
def __init__(self, name, age):
super(Child, self).__init__(name)
self.age = age
c = Child("Tom", 10)
print(c.name, c.age)
在上面的代碼中,我們定義了一個父類和一個子類,子類在重寫__init__方法時,使用了super函數調用了父類的__init__方法。輸出結果為:
Tom 10
可以看到,通過super函數,子類很容易地調用到了父類的初始化方法,實現了屬性的繼承。
四、super函數與多重繼承中的方法替換
在多重繼承中,有時候我們需要替換某個父類的方法。這時候,我們可以使用super函數來實現。
class A(object):
def some_method(self):
print("A類方法執行")
class B(object):
def some_method(self):
print("B類方法執行")
class Child(A, B):
def some_method(self):
super(B, self).some_method()
print("子類方法執行")
Child().some_method()
在上面的代碼中,子類繼承自A和B類,而且重寫了some_method方法。
在使用super函數的時候,我們可以指定要調用哪個父類的方法。在這個例子中,我們指定調用B類的some_method方法。
輸出結果為:
B類方法執行
子類方法執行
可以看到,通過super函數,我們成功地用子類的方法替換了B類的方法,實現了方法的動態替換。
五、總結
在Python中,super函數是一個很實用的函數,它可以很方便地實現多重繼承中父類方法的調用和替換。同時,它還可以用來調用父類的初始化方法,實現屬性的繼承。
大家在使用super函數的時候,需要注意指定要調用哪個父類的方法,同時要避免出現死循環的情況。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183278.html