課程
/后端開發(fā)
/Python
/Python3 進階教程(新版)
D不是繼承 B C么?? 為啥運行結(jié)果不是? ABCD
2022-10-09
源自:Python3 進階教程(新版) 3-4
正在回答
查了大量資料,大概是這樣。
python3的多繼承采用的是c3算法,將復(fù)雜結(jié)構(gòu)上的所有類都映射到一個線性順序上,而這個順序能夠保證所有的類都被構(gòu)造一次,這個也就是方法搜索的順序mro
針對題目中的代碼,mro順序為D→B→C→A,這也就是方法的搜索順序,而每一次執(zhí)行方法的時候,比如執(zhí)行D類的方法,碰到super()后就會跳過接下來的語句而直接往右邊的順序的類中去繼續(xù)搜索方法,所以D類的print語句就會被先跳過,變成搜索B類的方法,而B類的方法中也有super(),所以也是繼續(xù)跳過,直到A類中沒有可以跳過的語句,就會先執(zhí)行打印出來print ('init A...'),然后也是根據(jù)順序依次把剩下的語句(此時剩下的都是print語句)都執(zhí)行,A類執(zhí)行完到C類到B類到D類。
提供一個網(wǎng)址:https://pythontutor.com/visualize.html#mode=edit
這個網(wǎng)站可以解析代碼的執(zhí)行順序與細節(jié),可以直觀查看代碼怎么執(zhí)行的~
土斤土斤
舉報
學習函數(shù)式、模塊和面向?qū)ο缶幊?,掌握Python高級程序設(shè)計
1 回答多重繼承傳參順序問題
1 回答多態(tài)繼承順序
3 回答多重繼承問題:super中傳一個多重繼承的類,只能識別到第一個
1 回答多重繼承init的參數(shù)問題
1 回答多重繼承中屬性重名怎么辦
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2022-12-07
查了大量資料,大概是這樣。
python3的多繼承采用的是c3算法,將復(fù)雜結(jié)構(gòu)上的所有類都映射到一個線性順序上,而這個順序能夠保證所有的類都被構(gòu)造一次,這個也就是方法搜索的順序mro
針對題目中的代碼,mro順序為D→B→C→A,這也就是方法的搜索順序,而每一次執(zhí)行方法的時候,比如執(zhí)行D類的方法,碰到super()后就會跳過接下來的語句而直接往右邊的順序的類中去繼續(xù)搜索方法,所以D類的print語句就會被先跳過,變成搜索B類的方法,而B類的方法中也有super(),所以也是繼續(xù)跳過,直到A類中沒有可以跳過的語句,就會先執(zhí)行打印出來print ('init A...'),然后也是根據(jù)順序依次把剩下的語句(此時剩下的都是print語句)都執(zhí)行,A類執(zhí)行完到C類到B類到D類。
提供一個網(wǎng)址:https://pythontutor.com/visualize.html#mode=edit
這個網(wǎng)站可以解析代碼的執(zhí)行順序與細節(jié),可以直觀查看代碼怎么執(zhí)行的~
2022-10-10