python多繼承父類存在同名方法和MaxIn
阿新 • • 發佈:2018-12-21
廢話不多說,還是堅持程式碼驅動,先看程式碼,引出問題
一,python多繼承 父類存在同名方法
class land(object): def me(self): print('land') def run(self): print('run...') class sky(object): def me(self): print('fly') def fly(self): print('fly...') class plane(land, sky): pass p = plane() p.run() p.fly() p.me() Output: run... fly... land
可以看到,land類和sky類都有 me方法,然而plane最後卻選擇了land的方法,這說明多繼承時,如果父類方法同名,優先順序從左往右。
那麼想要呼叫sky的me方法該怎麼辦?
class plane(land, sky): def me(self): super().me() #land的me super(plane,self).me() #land的me super(land,self).me() #sky的me p = plane() p.me() Output: land land fly
修改的plane就是上面這樣,所以預設呼叫的從左往右第一個,但實際上可以呼叫任意一個。
二,java單繼承多實現
java是單繼承的,所以不會出現多繼承上述問題。有的人會說不是有多實現麼?那麼多實現的時候,介面有同名方法怎麼處理?
搞清楚裡面的關係:
介面的實現是交給了實現類的,那麼不存在實現類呼叫介面方法的問題,而是介面呼叫繼承了自己類的具體實現。
三,MaxIn
繼承一般有一條主線,當主線滿足不了需求,需要新增那些不在主線上的功能的時候,就需要繼承別的類,這個時候可以把這種類設計成MaxIn——也就是僅僅提供新功能組合出更強大的功能,而不改變原有的繼承主線結構。
MaxIn只是一個名字而已,python裡也確實有以MaxIn結尾的這種設計。其實細細品味下來,MaxIn和java的Interface有異曲同工之妙,都是為了提倡功能組合來簡化繼承結構。