靜態方法和類方法的創建:
將它們分別包裝在staticmethod和classmethod類的對象中。
靜態方法的定義中沒有參數self,可直接通過類來調用。
類方法的定義中包含類似於self的參數,通常被命名為cls。對於類方法,也可通過對象直接調用,但參數cls將自動關聯到類。
示例:
1 class MyClass: 2 3 def smeth(): 4 print("This is a static method") 5 6 smeth = staticmethod(smeth) 7 8 def cmeth(cls): 9 print("This is a class method of",cls) 10 cmeth = classmethod(cmeth)
像這樣手工包裝盒替換方法有點繁瑣。所以引入裝飾器(裝飾器可用於包裝任何可調用的對象,並且可用於方法和函數),可指定一個或多個裝飾器,為此可在方法(或函數)前面使用運算符@列出這些裝飾器,
指定多個裝飾器時,應用的順序與列出的順序相反(從后往前調用)。
1 class MyClass: 2 3 @staticmethod 4 def smeth(): 5 print("This is a static method") 6 7 @classmethod 8 def cmeth(cls): 9 print("This is a class method of",cls)
定義這些方法后,就可像下面那樣使用它們(無需實例化類):
This is a static method This is a class method of <class '__main__.MyClass'>