亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

尤溪县| 漳平市| 沙洋县| 丘北县| 富顺县| 汝城县| 社会| 玉溪市| 迁安市| 洪雅县| 苏尼特右旗| 丹寨县| 望奎县| 定西市| 山西省| 阜阳市| 宜州市| 大姚县| 抚宁县| 思茅市| 广水市| 佛山市| 上蔡县| 大足县| 新野县| 新闻| 莱芜市| 南丹县| 建昌县| 侯马市| 睢宁县| 密云县| 青铜峡市| 四子王旗| 冕宁县| 岢岚县| 军事| 独山县| 惠安县| 汝阳县| 台北县|