您好,登錄后才能下訂單哦!
本篇內容主要講解“python面試題代碼分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python面試題代碼分析”吧!
class A: def who(self): print('A', end='') class B(A): def who(self): super(B, self).who() print('B', end='') class C(A): def who(self): super(C, self).who() print('C', end='') class D(B, C): def who(self): super(D, self).who() print('D', end='') item = D() item.who()
點評:這道題考查到了兩個知識點:
Python中的MRO(方法解析順序)。在沒有多重繼承的情況下,向對象發出一個消息,如果對象沒有對應的方法,那么向上(父類)搜索的順序是非常清晰的。如果向上追溯到
object
類(所有類的父類)都沒有找到對應的方法,那么將會引發AttributeError
異常。但是有多重繼承尤其是出現菱形繼承(鉆石繼承)的時候,向上追溯到底應該找到那個方法就得確定MRO。Python 3中的類以及Python 2中的新式類使用C3算法來確定MRO,它是一種類似于廣度優先搜索的方法;Python 2中的舊式類(經典類)使用深度優先搜索來確定MRO。在搞不清楚MRO的情況下,可以使用類的mro
方法或__mro__
屬性來獲得類的MRO列表。
super()
函數的使用。在使用super
函數時,可以通過super(類型, 對象)
來指定對哪個對象以哪個類為起點向上搜索父類方法。所以上面B
類代碼中的super(B, self).who()
表示以B類為起點,向上搜索self
(D類對象)的who
方法,所以會找到C
類中的who
方法,因為D
類對象的MRO列表是D --> B --> C --> A --> object
。
ACBD
到此,相信大家對“python面試題代碼分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。