一、查缺補漏
1. 實體方法必須用類範例化物件()來呼叫,用類來呼叫時會執行,但是self中不是範例化類地址而是傳的字串
二、類中的方法
1. 實體方法
1. 定義在類裡面的普通方法(函數)
2. 第一個引數必須是類範例,在方法呼叫的時候會自動傳遞,這個引數名稱可以隨便定義預設self
3. 類內部:self.方法名稱()
4. 類外部:範例.方法名稱()
2. 類方法
1. 定義在類中,通過@classmethod修飾的普通方法就叫類方法
2. 第一個引數為當前類,這個引數的名稱可以隨便定義預設使用cls定義,但是用self呼叫
3. 類內部:self.方法名稱()
4. 類外部:類.方法名稱() 和類範例.方法名稱()
3. 靜態方法(不需要傳任何引數,自己可以定義引數不用寫self引數,其他和類方法一致)
1. 定義在類中,通過@staticmethod修飾的普通方法就叫靜態方法
2. 預設無需傳任何引數
3. 類內部:self.方法名稱()
4. 類外部:類.方法名稱()
4. 私有方法 (私有的函數體)
1. 雙下劃線開頭的方法就叫私有方法
2. 傳參無區別和普通方法一致
3. 類內部:self._ _方法名()
4. 類外部:不允許存取,可以強行存取,但是最好不用
5. _函數名,_ _函數名_ _方法和屬性,就算不是私有的也不要在外部去存取,可能是開發預留之後要用到的
5. 總結
1. 實體方法:一般要實現某些功能用實體方法,常用
2. 類方法:類沒有初始化方法,也不需要初始化的時候傳任何引數進來,只傳self,不想去範例化類時候用
3. 靜態方法:類沒有初始化方法,也不需要初始化的時候傳任何引數進來,不用傳self,也不用去範例化類
4. 類方法和靜態方法的使用一般是在需要運算出結果時但又不需要範例化類時使用
5. 私有方法:在類的內部使用,不希望被外部使用,類裡面某些方法的輔助方法,用於封裝
三、類的特性:繼承、封裝、多型 所有類統一都繼承的類叫基礎類別object,預設繼承
1. 一些概念:
1. 什麼繼承:子類繼承父類別,就能直接使用父類別的屬性和方法(私有屬性和方法除外) 繼承過來之後就可以存取屬性
2. 什麼是封裝:隱藏實現細節,只對外提供某些功能
3. 什麼是多型:還沒講
2. 單繼承--自動化不用
1. 寫法:class 新函數名(要繼承的函數名)
2. 初始化子類:初始化之後會自動去呼叫初始化方法,如果子類沒有初始化方法,會去父類別找初始化方法去執行
子類有先用子類的,沒有用父親的
3. 子類呼叫自己的方法:子類和父類別有同名的方法和屬性,優先使用子類自己的方法和屬性
子類沒有實現某個方法,他會去父類別找,找到了就執行父類別的方法
查詢順序:呼叫時先找子類之後找父類別
4. 子類直接呼叫父類別的方法 super().父類別方法名() 子類和父類別都有但是想用父類別的
查詢順序:圖1先查詢父類別,在執行子類;圖2只查詢父類別,父類別中沒有的會報錯
普通方法、初始化方法(__init__)有區別在多繼承時,單繼承無區別
父類別名稱().__init__() 多繼承會導致重複支援父類別的初始化方法,單繼承也會呼叫兩次
super().__init() 呼叫父類別方法推薦使用
5. 繼承的使用場景
1. 拓展父類別的功能在父類別和子類同名方法時
2. 重寫父類別【父類別和子類同名方法】
6. 需要使用父類別方法,避免重實現
7. 繼承之後對父類別方法的修改原則
1. 父類別已經實現的功能,不要去修改父類別的方法【不要做】
2. 如果需要你可以對父類別方法進行功能拓展【可以做】
本文來自部落格園,作者:Alisa-sweet,轉載請註明原文連結:https://www.cnblogs.com/Alisa-sweet/p/17351158.html