super主要用來調用父類方法,顯式調用父類,在子類中,一般會定義與父類相同的屬性(數據屬性,方法),從而來實現子類特有的行爲。也就是說,子類會繼承父類的所有的屬性和方法,子類也可以覆蓋父類同名的屬性和方法。
class Parent(object):
Value = "Hi, Parent value"
def fun(self):
print("This is from Parent")
#定義子類,繼承父類
class Child(Parent):
Value = "Hi, Child value"
def ffun(self):
print("This is from Child")
c = Child()
c.fun()
c.ffun()
print(Child.Value)
輸出結果:
This is from Parent
This is from Child
Hi, Child value
但是,有時候可能需要在子類中訪問父類的一些屬性,可以通過父類名直接訪問父類的屬性,當調用父類的方法時,需要將”self”顯示的傳遞進去的方式:
class Parent(object):
Value = "Hi, Parent value"
def fun(self):
print("This is from Parent")
class Child(Parent):
Value = "Hi, Child value"
def fun(self):
print("This is from Child")
Parent.fun(self) #調用父類Parent的fun函數方法
c = Child()
c.fun()
輸出結果:
This is from Child
This is from Parent #實例化子類Child的fun函數時,首先會打印上條的語句,再次調用父類的fun函數方法
這種方式有一個不好的地方就是,需要經父類名硬編碼到子類中,爲了解決這個問題,可以使用Python中的super關鍵字:
class Parent(object):
Value = "Hi, Parent value"
def fun(self):
print("This is from Parent")
class Child(Parent):
Value = "Hi, Child value"
def fun(self):
print("This is from Child")
#Parent.fun(self)
super(Child,self).fun() #相當於用super的方法與上一調用父類的語句置換
c = Child()
c.fun()
輸出結果:
This is from Child
This is from Parent #實例化子類Child的fun函數時,首先會打印上條的語句,再次調用父類的fun函數方法
參考 :https://blog.csdn.net/brucewong0516/article/details/79121179