在子類派生的新方法中如何重用父類的功能
方式一:指名道姓調(diào)用某一個(gè)類下的函數(shù)=》不依賴于繼承關(guān)系
專注于為中小企業(yè)提供網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)宿遷免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
class OldboyPeople:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def f1(self):
print('%s say hello' %self.name)
class Teacher(OldboyPeople):
def __init__(self,name,age,sex,level,salary):
OldboyPeople.__init__(self,name,age,sex)
self.level = level
self.salary=salary
tea_obj=Teacher('egon',18,'male',10,3000)
print(tea_obj.__dict__)
方式二:super()調(diào)用父類提供給自己的方法=》嚴(yán)格依賴?yán)^承關(guān)系
調(diào)用super()會(huì)得到一個(gè)特殊的對(duì)象,該對(duì)象會(huì)參照發(fā)起屬性查找的那個(gè)類的mro,去當(dāng)前類的父類中找屬性
提示:在Python2中super的使用需要完整地寫成super(自己的類名,self) ,而在python3中可以簡(jiǎn)寫為super()。
#Python學(xué)習(xí)交流群:
class OldboyPeople:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def f1(self):
print('%s say hello' %self.name)
class Teacher(OldboyPeople):
def __init__(self,name,age,sex,level,salary):
# super(Teacher,self).__init__(name,age,sex)
super().__init__(name,age,sex) # 調(diào)用的是方法,自動(dòng)傳入對(duì)象
self.level = level
self.salary=salary
# print(Teacher.mro())
tea_obj=Teacher('egon',18,'male',10,3000)
print(tea_obj.__dict__)
super()案例
class A:
def test(self):
print('from A')
super().test()
class B:
def test(self):
print('from B')
class C(A,B):
pass
obj=C()
obj.test()
print(C.mro())
這兩種方式的區(qū)別是:
方式一是跟繼承沒有關(guān)系的,而方式二的super()是依賴于繼承的,并且即使沒有直接繼承關(guān)系,super()仍然會(huì)按照MRO繼續(xù)往后查找