在子類派生的新方法中如何重用父類的功能
方式一:指名道姓呼叫某一個類下的函式=》不依賴于繼承關系
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()呼叫父類提供給自己的方法=》嚴格依賴繼承關系
呼叫super()會得到一個特殊的物件,該物件會參照發起屬性查找的那個類的mro,去當前類的父類中找屬性
提示:在Python2中super的使用需要完整地寫成super(自己的類名,self) ,而在python3中可以簡寫為super(),
#Python學習交流群:711312441
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) # 呼叫的是方法,自動傳入物件
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())
這兩種方式的區別是:
方式一是跟繼承沒有關系的,而方式二的super()是依賴于繼承的,并且即使沒有直接繼承關系,super()仍然會按照MRO繼續往后查找
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509560.html
標籤:Python
上一篇:Python采集《驚奇先生》, 下載你想看的高質量漫畫
下一篇:python中組合資料的操作
