![](../../img/interpret.jpg)
Python 簡易手冊
單元 59 - 靜態方法
靜態方法 (static method) 的類別方法 (class method) 類似,但是靜態方法沒有預設參數 (parameter) ,也就不能直接存取類別屬性 (class attribute) ,舉例如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 定義類別 class Demo: # 定義靜態方法 @staticmethod def do_something(): print("Do something...") # 呼叫靜態方法 Demo.do_something() # 檔名: class_demo15.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 54 - 類別介紹類別 (class) 的基本概念,單元 58 - 類別屬性與類別方法介紹如何定義類別屬性及類別方法。
定義靜態方法的上一行要加上裝飾子 (decorator) @staticmethod ,底下直接呼叫靜態方法,執行結果如下
> python class_demo15.py |
Do something... |
> |
單元 48 - 裝飾子介紹裝飾子的概念,這裡的 @staticmethod 其實是內建函數 (built-in function) staticmethod() 。
在靜態方法中如果要使用類別屬性或類別方法都要用類別名稱呼叫,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 定義類別 class Demo: # 定義類別屬性 name = "Demo" # 定義靜態方法 @staticmethod def print_name(): print(Demo.name) # 呼叫靜態方法 Demo.print_name() # 檔名: class_demo16.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這個例子簡單示範在靜態方法中印出類別屬性 name 的值,執行結果如下
> python class_demo16.py |
Demo |
> |
如果要在靜態方法中使用使用實體屬性 (instance attribute) 或實體方法 (instance method) ,這需要在靜態方法中建立實體物件,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 定義類別 class Demo: # 定義建構子 def __init__(self, p): self.a = p # 定義實體方法 def print_a(self): print(self.a) # 定義靜態方法 @staticmethod def do_something(p): d = Demo(p) d.print_a() # 呼叫靜態方法 Demo.do_something(10) # 檔名: class_demo17.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 55 - 實體屬性與方法介紹如何定義實體方法及實體屬性。
這個例子是用靜態方法取代實體方法的功能,因此不需要建立實體物件就能使用 print_a() ,執行結果如下
> python class_demo17.py |
10 |
> |
參考資料
![](../../img/pydoing.gif)