文章目錄
繼承
- 繼承是面向對象的三大特性之一
- 繼承可以讓一個類獲取其他類的屬性和方法
- 在定義類時,可以在類名後面的括號中指定當前類的父類(也稱爲超類,基類,super),子類(也稱爲衍生類)可以直接繼承父類中的所有方法和屬性
繼承的優點
- 繼承可以讓子類直接獲得父類的屬性和方法,避免編寫重複代碼,同時也符合OCP原則(開閉原則) ;
- 創建類時省略父類,則默認父類爲object,object是所有類的父類;
issubclass(a,b)
- 判斷一個類(a)是否a是另一個類(b)的子類,成立則返回True,否則返回false;
方法的重寫
- 如果子類中存在與父類同名的方法,則通過子類示例調用該方法時,會調用子類的方法而不是父類的方法,稱這個現象爲方法的重寫(覆蓋,override)
- 調用某對象的方法時,會優先去當前對象中尋找是否具有該方法,如果有則直接調用,如果沒有則去父類中尋找,以此類推;
super
- 繼承時父類的所有方法都會被子類繼承,包括特殊方法;
- super()可以直接獲得當前類的父類,
- 當子類中某些時候需要調用父類的方法時可以直接使用super.方法名,常用的是super().__ init __(參數)
多重繼承
- 在python中支持多重繼承,也就是可以爲一個類同時指定多個父類
- 類名.__ bases __ (雙下劃線)這個屬性可以獲取當前類的所有直接父類
- 一個子類擁有多個父類的時候,子類會擁有所有父類的方法和屬性
- 如果在多個父類中都有同名的方法,則會先在第一個父類中尋找,然後找第二個,第三個……排在前面的會覆蓋後面的;
多態
- 多態是面向對象的三大特徵之一,保證了程序的靈活性
- 違反多態性會導致適應性差,但會增加健壯性;
- 多態就是一類事物有多種形態,如序列有多種形態:字符串,列表,元組
多態性
- 不同的對象調用相同的函數實現不同的效果;
垃圾回收
- 在程序中沒有被變量引用的對象就是垃圾
垃圾回收機制
- python中會自動回收垃圾機制,它會自動刪除沒有引用的對象
- 程序結束後,對象也會被自動刪除
- 定義 __ del __()函數,觀察回收過程;
特殊方法
- 特殊方法以雙下劃線__開頭和結尾,一般不需要手動調用而是在特殊情況自動執行
__init__函數
- 用於對象的初始化
__del__函數
- 用於對象的刪除
__new__函數
- 用於對象的創建
__str__函數
- 打印對象時,實際上打印的是對象中特殊方法__str__的返回值
- str會在嘗試將對象轉化爲字符串時調用,可以用它來指定對象轉化成字符串後的結果
直接打印對象
重寫__str__函數後打印對象
__repr__函數
- __repr__在當前對象使用repr()函數時調用,其作用是指定對象在“交互模式中”直接輸出的結果
__lt__函數
- __ lt __(self,other) 小於
__le__函數
- __ le __(self,other)小於等於
__eq__函數
- __ eq __(self,other)等於
__ne__函數
- __ ne __(self,other)不等於
__gt__函數
- __ gt __(self,other)大於
__ge__函數
- __ ge __(self,other)大於等於
__len__函數
- __ len__(self)獲取對象的長度
object.__bool__函數
- object.__ bool__(self)將對象轉換爲bool,非空值轉化爲True,空值爲False;
- 可以重寫該函數來指定轉換爲bool的結果
__add__函數
- __ add__(self,other)將兩個對象相加並返回結果;
__sub__函數
- __ sub__(self,other)將兩個對象相加並返回結果;
__mul__函數
- __ mul__(self,other)將兩個對象相乘並返回結果;
__matmul__函數
- __ matmul__(self,other)將兩個對象相除並返回結果;