面向對象之繼承

面向對象的三大特徵:python

1、繼承:函數

  1. 定義:繼承是建立新類的方式,新建的類能夠繼承一個或多個父類(python中支持多繼承)。
  2. 繼承分爲單繼承(繼承一個父類)和多繼承(繼承多個父類)
  3. 爲何要用繼承:在程序中,經過繼承,能夠獲得父類的全部屬性(包括數據屬性、函數屬性)。
  4. 查看繼承:

父類在繼承中又稱爲基類,即基於這個父類而建立的新類,查看父類的方式:spa

      Sun.__bases__()(查看Sun所繼承的全部基類(父類))對象

      Sun.__base__()(從左到右查看第一個基類(即父類))繼承

 

若是沒有指定基類,python的類會默認繼承object類,object是全部python類的基類,它提供了一些常見方法(如__str__)的實現。基礎

 

2、繼承與抽象object

抽象:抽取多個類中的共同部分,組成一個新的類。抽象最主要的做用是劃分類別。程序

經過抽象:獲得公共部分的屬性,並放到一個類中,並做爲父類。方法

經過繼承:避免了重複代碼。數據

 

先抽象再繼承,繼承是基於抽象的結果,確定先通過抽象的過程,再經過繼承的方式去表達出抽象的結構

 

    分析:繼承所生成的全部子類,只要基類中包含了這個父類,獲得的子類確定包含這個基類中的全部屬性,也就是說,這些子類都含有某些相同屬性,那麼咱們在考慮問題的時候,能夠先把這些共同屬性抽取出來,放到一個類中,並把這個類做爲父類,進行繼承,因此說現有抽象,再有繼承。

 

 

4、派生:

定義:派生指的是子類繼承某個父類,而且這個子類擁有本身獨特的屬性和方法(即子類類中得有本身的屬性,不然與父類徹底相同),獲得一個派生類。

 

重用:實質是子類中再次用到父類中定義的屬性,包括方法和數據。

   重用的方式有兩種:

1.父類名.父類中的方法名(指名道姓)

2.super().父類中的方法名

super().方法名的方式:supper().實質是相對於一個對象,會按照對象訪問屬性的方式進行訪問,即有前後順序。

(Python2中,super()的用法super(子類名,self) ).方法。參數爲當前類,當前對象

super用在存在繼承關係的子類中。

 

查找順序:1.對象->->父類->父類的父類。。。。。

          2.若是一個子類由多個父類,那麼查找到父類級別時,順序是從左到右。

          3深度優先,沿着一條繼承路徑找到底,若是沒有,再找其餘繼承路徑

          4.當存在共同父類時,會產生菱形繼承關係。菱形繼承關秀:先深度優先,而後再廣度優先。

          

 

 

 

經典類與新式類的區別:

全部直接繼承或間接繼承object的類,都是新式類。(object 稱之爲根類,意思是全部類都源自於object類,簡單的說object提供了一些經常使用的基礎操做。)

即全部類都屬於新式類(在python3中)

python3中,默認全部類都是新式類;在python2中默認是經典類:不會自動繼承object

在經典類中,屬性的查找按照深度優先,一條路走到黑。(Python2中才有經典類。)

 

調用.mro()該方式,會顯示查找順序。

.super()訪問父類時,按照mro列表查找。

相關文章
相關標籤/搜索