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