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