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
>

參考資料

上一頁 單元 58 - 類別屬性與類別方法
回 Python 簡易手冊 首頁
下一頁 單元 60 - 資料類別與資料模型
回 Python 教材首頁
回程式語言教材首頁