91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

清河县| 武威市| 拜泉县| 石狮市| 枣阳市| 绥宁县| 当雄县| 托克逊县| 合阳县| 扶沟县| 友谊县| 易门县| 登封市| 台山市| 武邑县| 谷城县| 金昌市| 台南市| 合肥市| 大渡口区| 克山县| 安丘市| 宣武区| 西峡县| 喜德县| 白朗县| 绿春县| 广平县| 金华市| 竹山县| 大新县| 招远市| 青阳县| 额尔古纳市| 新和县| 拜城县| 鹤峰县| 岳西县| 万山特区| 烟台市| 乡宁县|