
*****
## 深入類和對象
### 鴨子類型和多態
多態的概念是應用于Java和C#這一類強類型語言中,而Python崇尚"鴨子類型"
<br>動態語言調用實例方法時不檢查類型,只要方法存在,參數正確,就可以調用。這就是動態語言的“鴨子類型”,它并不要求嚴格的繼承體系,一個對象只要“看起來像鴨子,走起路來像鴨子”,那它就可以被看做是鴨子。
<br>所謂多態:定義時的類型和運行時的類型不一樣,此時就成為多態。
### 抽象基類(abc模塊)
抽象基類(abstract base class,ABC):抽象基類就是類里定義了純虛成員函數的類。純虛函數只提供了接口,并沒有具體實現。抽象基類不能被實例化(不能創建對象),通常是作為基類供子類繼承,子類中重寫虛函數,實現具體的接口。
<br>抽象基類就是定義各種方法而不做具體實現的類,任何繼承自抽象基類的類必須實現這些方法,否則無法實例化。
### 應用場景
* 判斷某個對象的類型
* 我們需要強制某個子類必須實現某些方法
### 使用isinstance和type的區別
~~~
i = 1
s = 'a'
isinstance(i,int)
isinstance(s,str)
isinstance(s,int)
~~~
### 類變量和對象變量
~~~
class A:
aa = 1
def __init__(self,x,y):
self.x = x
self.y = y
~~~
### 類屬性和實例屬性以及查找順序
### MRO算法

Python2.2之前的算法:金典類
DFS(deep first search):A->B->D->C->E
<br>

Python2.2版本之后,引入了BFS(廣度優先搜索)
BFS:A->B->C->D
<br>在Python2.3之后,Python采用了C3算法
Python新式類繼承的C3算法:[https://www.cnblogs.com/blackmatrix/p/5644023.html](https://www.cnblogs.com/blackmatrix/p/5644023.html)
### Python對象的自省機制
自省是通過一定的機制查詢到對象的內部結構
<br>Python中比較常見的自省(introspection)機制(函數用法)有: dir(),type(), hasattr(), isinstance(),通過這些函數,我們能夠在程序運行時得知對象的類型,判斷對象是否存在某個屬性,訪問對象的屬性。
### super函數
在類的繼承中,如果重定義某個方法,該方法會覆蓋父類的同名方法,但有時,我們希望能同時實現父類的功能,這時,我們就需要調用父類的方法了,可通過使用?`super`?來實現