中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python多繼承廣度優先C3算法原理是什么

發布時間:2021-11-25 09:42:14 來源:億速云 閱讀:208 作者:iii 欄目:互聯網科技

這篇文章主要介紹“python多繼承廣度優先C3算法原理是什么”,在日常操作中,相信很多人在python多繼承廣度優先C3算法原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python多繼承廣度優先C3算法原理是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

python多繼承比較復雜,python2的多繼承查找順序是深度優先,pyhon3的多繼承查找順序是采取C3算法的廣度優先。

C3算法原理:

  1. python解釋器每遇到一個類就會按廣度優先的原則將其父類的繼承序列依次添加進它的本序列。

  2. 首先將自身類加入本序列,然后對繼承序列的元素依次判斷。

  3. 若某元素不在其他序列或者它是所有繼承序列的第一個,那么把這個元素提取到本序列。

  4. 若該元素不符合第3步,則跳過它尋找下一個元素繼續進行第3步操作。

  5. 循環執行3-4步驟,直至繼承序列的所有元素都被提取到本序列。

案例:

python多繼承廣度優先C3算法原理是什么

代碼:

class F:print('F')class G:print('G')class D(F):print('D')class E(G):print('E')class B(D, E):print('B')class C(E):print('C')class A(B, C):print('A')

講解:

解釋器每遇到一個類就會按C3算法廣度優先的原則將其父類的繼承序列依次添加進它的本序列。

一、F類 [F,O]。

二、G類 [G,O]。

三、D類 [D] + F類 [F,O],單繼承:[DFO]。

四、E類 [E] + G類 [G,O],單繼承:[EGO]。

五、B類 [B] , D類 [DFO] + E類 [EGO]:
第一步,[DFO]的D不在其他序列,提取到本序列——[BD] , [FO] + [EGO];
第二步,[FO]的F不在其他序列,提取到本序列——[BDF] , [O] + [EGO];
第三步,[O]的O在其他序列且不是第一個,跳過它向后找——[BDF] , [O] + [EGO];
第四步,[EGO]的E不在其他序列,提取到本序列——[BDFE] , [O] + [GO];
第五步,[GO]的G不在其他序列,提取到本序列——[BDFEG] , [O] + [O];
第六步,[O]的O是所有繼承序列的第一個,提取放入本序列——[BDFEGO] , [] + [];
第七步,所有繼承序列均為空,運算完成——[BDFEGO];
C3算法運算結果:[BDFEGO]。
六、C類 [C] + E類 [EGO],單繼承:[CEGO]。
七、A類 [A] , B類 [BDFEGO] + C類 [CEGO]:
第一步,[BDFEGO]的B不在其他序列,提取到本序列——[AB] , [DFEGO] + [CEGO];
第二步,[DFEGO]的D不在其他序列,提取到本序列——[ABD] , [FEGO] + [CEGO];
第三步,[FEGO]的F不在其他序列,提取到本序列——[ABDF] , [EGO] + [CEGO];
第四步,[EGO]的E在其他序列且不是第一個,跳過它向后找——[ABDF] , [EGO] + [CEGO];
第五步,[EGO]的G在其他序列且不是第一個,跳過它向后找——[ABDF] , [EGO] + [CEGO];
第六步,[EGO]的O在其他序列且不是第一個,跳過它向后找——[ABDF] , [EGO] + [CEGO];
第七步,[CEGO]的C不在其他序列,提取到本序列——[ABDFC] , [EGO] + [EGO];
第八步,[EGO]的E是所有繼承序列的第一個,提取放入本序列——[ABDFCE] , [GO] + [GO];
第九步,[GO]的G是所有繼承序列的第一個,提取放入本序列——[ABDFCEG] , [O] + [O];
第十步,[O]的O是所有繼承序列的第一個,提取放入本序列——[ABDFCEGO] , [] + [];
第十一步,除了本序列外,其他序列均為空,運算完成——[ABDFCEGO];
C3算法運算結果:[ABDFCEGO]。

測試代碼

C3算法的廣度優先有點復雜,比較難懂,python3為此提供了簡便的查詢函數 —— 類名.mro() 。

print(A.mro())out:[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.F'>, <class '__main__.C'>, <class '__main__.E'>, <class '__main__.G'>, <class 'object'>]

可以看到A.mro()打印的結果和上述推理的運算結果ABDFCEGO一致。

到此,關于“python多繼承廣度優先C3算法原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 太原市| 东安县| 永春县| 上蔡县| 灵寿县| 仁怀市| 东港市| 嘉黎县| 额尔古纳市| 西平县| 澳门| 北宁市| 安宁市| 沁源县| 临清市| 彭山县| 太白县| 资讯| 邯郸市| 湖北省| 华坪县| 青铜峡市| 夏津县| 木兰县| 霍州市| 太保市| 晋州市| 张掖市| 应城市| 忻州市| 芒康县| 巴东县| 阿克陶县| 云南省| 无锡市| 林周县| 全椒县| 福海县| 胶南市| 江油市|