Python學習第二十一節 繼承順序,super

2022-06-01 16:45:11 字數 1627 閱讀 2539

複習:

抽象類

通過裝飾器來定義這個函式。

抽象類本身也是個類,但是本身不能被例項化。

繼承的實現原理

多重繼承,當乙個類是多個父類的子類,查詢的順序是:

__dict__ 》 然後按照繼承的()左右順序來尋找

如果子類的父類還有乙個父類,那麼他會先去尋找自己的樹狀類(d找不到自己的就去找a,a找不到就去找e,然後再去找b、c),而不是直接左右順序尋找。

新式類中,上圖這種,3條岔路的,是ad>b>c這個順序。廣度優先。

如上圖,練習。

新式類裡,菱形找是先找eb>fc>gda 這個順序。

這個mro可以看到呼叫路線,但是只有新式類才有,經典類沒有。

經典類是先走到頭,在走別的路線。

h>e>b>a>f>c>g>d這個順序。深度優先

子類呼叫父類的方法

super()只有新式類裡有super,按照新式類的繼承順序來繼承。

super().foo() 呼叫父類的foo()函式,不用寫引數,因為是繫結方法所以自動傳參。

super的缺點是找到乙個就會停止。

people.__init__這種可以寫多個,可以找多個。指名道姓方法。

python2和pyhton3的區別。

封裝

假裝隱藏了資料屬性,在屬性前面加上__ 之後就物件就不能直接呼叫了,實際上是在__前面加上了_類名,可以用t.__dict__來檢視

封裝的變形,只在類定義階段或者物件定義階段(例項化)發生

之後更改的不會變形。

self.bar() 先從self自己找bar()函式。所以列印的先是print('from a.foo')

然後找的是class b的def bar()

變形之後 找到的是a的def foo 的self.__bar

因為在定義的時候__bar就變形了。

第二十一節 異常處理

異常處理 異常分為2種,一種是語法錯誤 必須在除錯的時候處理掉 一種是邏輯錯誤 為了保證程式的健壯性與容錯性,即在遇到錯誤時程式不會崩潰,我們需要對此異常進行處理 exception異常是其他所有異常類的基類,可代表所有異常 s1 hello 異常多分支 try int s1 except inde...

第二十一題

題目 猴子吃桃問題 猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了乙個第二天早上又將剩下的桃子吃掉一半,又多吃了乙個。以後每天早上都吃了前一天剩下的一半零乙個。到第10天早上想再吃時,見只剩下乙個桃子了。求第一天共摘了多少。my code 正向思考 index true remain0 0...

第二十一天 PYTHON學習

今日學習 一 什麼是序列化?我們把物件 變數 從記憶體中變成可儲存或傳輸的過程稱之為序列化,在python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是乙個意思。二 為什麼要序列化?1 持久儲存狀態 硬碟存 需知乙個軟體...