一、查缺補漏
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. 如果需要你可以對父類方法進行功能擴充【可以做】