Python 類別&裝飾器 學習筆記
Copyright 2021, 月下麒麟
此篇僅作紀錄用~
reference:[Python教學] Class / Static /Abstract Method 初探
因該原作寫得相當清楚,而做為自我練習並引用其程式當範例
定義屬性的三個方法
staticmethod classmethod
- Static method 靜態方法:不帶實例,不帶 class 為參數的方法
- Class method 類方法:不帶實例,帶有 class 為參數的方法
- Abstract method 抽象方法:尚未被實作,且繼承 class 一定要用覆寫來實作
Staticmethod
- StaticMethods 使用方法:
在 def 函式上加上 @staticmethod,不用傳入 self 參數
- StaticMethods 使用時機:
不在需要將 class 實例後才能使用函式,直接像以下範例呼叫 People_StaticMethods.work(4) 即可使用
classmethod
- ClassMethods 使用方法:
在 def 函式上加上 @classmethod
必須傳入 class 本身參數,通常大家都會命名為 cls
如果要引入 class 其他函式,可以使用 cls().sleep(6)
- ClassMethods 使用時機:
不在需要將 class 實例後才能使用函式,直接像以下範例呼叫 People_ClassMethods.work(5) 即可使用
不同於 StaticMethods,因為多引入了 class 本身參數為 cls,可以利用 cls 來 access 其他 class 內的函式
AbstractMethod
- AbstractMethods 使用時機:
抽象類 (Employee) 的特點是不能實例化,只能被子類繼承
任何繼承 Employee 的類,都必須有實現 work 方法,否則會拋出異常,像是 class Max(Employee) 中,只定義了 def sleep(self),沒有定義 work 方法,所以再引用時會出現 Can’t instantiate abstractclass Max with abstract methods work 的錯誤。
裝飾器
我的理解是,裝飾器由上而下
先去裝飾器裡面
再到使用裝飾器的函式
最後,再回到裝飾器執行完畢
遇到兩層或以上
一樣由上而下