Python學習筆記二十二_繼承
阿新 • • 發佈:2018-05-31
類的方法 elf 重寫 它的 smi 基礎上 調用 新功能 廣度優先
上一篇“面向對象”中簡單介紹了繼承,即一個類可以派生出子類,在這個父類裏定義的屬性、方法自動被子類繼承。子類可以重寫父類方法。繼承是為了代碼重用。這篇重點寫一下重寫父類的方法及經典類與新式類在多繼承時的區別。
一、重寫父類的方法
所謂多繼承就是一個子類可以繼承多個父類。
重寫父類方法的情況有以下兩種:
1、父類的方法一點用沒有,直接重新寫就好
2、父類有這個方法,但是它的功能不夠完善,想給這個方法在原有基礎上再添加一些新功能
通過 父類名().方法()或者super(子類名,self).方法()來實現
class Daddy(): def smile(self):print(‘哈哈‘) class Daddy1(): def smile(self): print(‘嘿嘿‘) class Son(Daddy,Daddy1):#子類可以繼承多個父類 def smile(self):#重寫父類的方法 Daddy().smile()#調用了父類,先實例化再調用方法 super(Son,self).smile()#Super這個關鍵字自動幫你找到父類,Super括號中寫(子類,self) # 如果Daddy中有smile就調用Daddy中的smile,如果Daddy中沒有smile,就去Daddy1中去找smile# 按照父類的順序去尋找smile方法,直到找到就調用,後面的不再調用 print(‘呵呵‘) s = Son() s.smile()
二、經典類與新式類的區別
Python3中,經典類與新式類沒有任何的區別,多繼承都是廣度優先
Python2中,多繼承的時候經典類是深度優先,新式類是廣度優先,經典類裏面不能用super方法
#第一個父類B有x這個方法 class A: def x(self): print(‘a‘) class B(A): def x(self): print(‘b‘) class C(A):def x(self): print(‘a‘) class D(B,C): pass d = D() d.x() #b #第一個父類B沒有x這個方法,經典類深度優先找到A中的x class A: def x(self): print(‘a‘) class B(A): pass class C(A): def x(self): print(‘a‘) class D(B,C): pass d = D() d.x() #a #第一個父類B沒有x這個方法,新式類廣度優先找到C中的x class A(object): def x(self): print(‘a‘) class B(A): pass class C(A): def x(self): print(‘a‘) class D(B,C): pass d = D() d.x() #c
Python學習筆記二十二_繼承