最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

請(qǐng)問(wèn)這個(gè)多重繼承的結(jié)果 為啥是 這樣的順序? 怎么來(lái)的

http://img4.sycdn.imooc.com/6342c75b0001a1d707480722.jpg

http://img4.sycdn.imooc.com/6342c7520001f3f608040242.jpg

D不是繼承 B C么?? 為啥運(yùn)行結(jié)果不是? ABCD

正在回答

2 回答

查了大量資料,大概是這樣。

python3的多繼承采用的是c3算法,將復(fù)雜結(jié)構(gòu)上的所有類(lèi)都映射到一個(gè)線(xiàn)性順序上,而這個(gè)順序能夠保證所有的類(lèi)都被構(gòu)造一次,這個(gè)也就是方法搜索的順序mro


針對(duì)題目中的代碼,mro順序?yàn)镈→B→C→A,這也就是方法的搜索順序,而每一次執(zhí)行方法的時(shí)候,比如執(zhí)行D類(lèi)的方法,碰到super()后就會(huì)跳過(guò)接下來(lái)的語(yǔ)句而直接往右邊的順序的類(lèi)中去繼續(xù)搜索方法,所以D類(lèi)的print語(yǔ)句就會(huì)被先跳過(guò),變成搜索B類(lèi)的方法,而B(niǎo)類(lèi)的方法中也有super(),所以也是繼續(xù)跳過(guò),直到A類(lèi)中沒(méi)有可以跳過(guò)的語(yǔ)句,就會(huì)先執(zhí)行打印出來(lái)print ('init A...'),然后也是根據(jù)順序依次把剩下的語(yǔ)句(此時(shí)剩下的都是print語(yǔ)句)都執(zhí)行,A類(lèi)執(zhí)行完到C類(lèi)到B類(lèi)到D類(lèi)。


提供一個(gè)網(wǎng)址:https://pythontutor.com/visualize.html#mode=edit

這個(gè)網(wǎng)站可以解析代碼的執(zhí)行順序與細(xì)節(jié),可以直觀(guān)查看代碼怎么執(zhí)行的~

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

土斤土斤

把BCD類(lèi)的super()方法上面再各加一句,比如D類(lèi)的super()的語(yǔ)句上面再加一句print('super D...')后去執(zhí)行看看,也可以直觀(guān)理解執(zhí)行代碼的順序
2022-12-07 回復(fù) 有任何疑惑可以回復(fù)我~
同問(wèn)題,我以為是編譯器串行的速度的原因,但是我執(zhí)行了好幾次,每次都是這個(gè)結(jié)果
0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

請(qǐng)問(wèn)這個(gè)多重繼承的結(jié)果 為啥是 這樣的順序? 怎么來(lái)的

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)