面向對象的三大特徵:python
1、繼承:函數
父類在繼承中又稱爲基類,即基於這個父類而建立的新類,查看父類的方式: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列表查找。