Python 簡易手冊

單元 58 - 類別屬性與類別方法

類別屬性 (class attrubute) 跟類別方法 (class method) 都是屬於類別 (class) 的,其實直譯器 (interpreter) 執行程式後,會把所有類別定義建立為類別物件,因此類別就有屬於類別的屬性 (attribute) 及方法 (method) 。以下示範定義類別屬性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 定義類別
class Demo:
    # 定義類別屬性
    count = 0
    name = "Demo"

# 印出類別屬性
print(Demo.count)
print(Demo.name)

# 檔名: class_demo11.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

單元 54 - 類別介紹類別 (class) 的基本概念。

類別屬性直接在關鍵字 (keyword) class 的下一行縮排部分設定,然後預設直接用類別名稱存取類別屬性,此例執行結果如下

> python class_demo10.py
0
Demo
>

類別屬性在類別中可以直接用類別方法存取,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 定義類別
class Demo:
    # 定義類別屬性
    count = 0

    # 定義建構子
    def __init__(self):
        Demo.add_count()

    # 定義類別方法
    @classmethod
    def add_count(cls):
        cls.count += 1

# 印出類別屬性
print(Demo.count)
# 建立物件 10 次
for i in range(10):
    d = Demo()
# 印出類別屬性
print(Demo.count)

# 檔名: class_demo12.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

定義類別方法的上一行要加上裝飾子 (decorator) @classmethod

10
11
12
13
    # 定義類別方法
    @classmethod
    def add_count(cls):
        cls.count += 1

單元 48 - 裝飾子介紹裝飾子的概念,這裡的 @classmethod 其實是內建函數 (built-in function) classmethod()

這個類別方法 add_count() 是把類別屬性 count1 ,注意類別方法的預設參數 (parameter) 習慣上寫 clscls 可以直接存取類別屬性,然後在建構子 (constructor) 中呼叫 add_count()

 6
 7
 8
    # 定義建構子
    def __init__(self):
        Demo.add_count()

實體方法 (instance method) 中使用類別方法要用類別名稱呼叫,底下先印出 count ,然後建立 Demo 物件 10 次,由於每一個建立 Demo 物件都會呼叫 add_count() ,所以 count 會被遞增到 10 ,此例執行結果如下

> python class_demo12.py
0
10
>

如果要在類別方法中使用實體屬性或實體方法 (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
25
26
27
# 定義類別
class Demo:
    # 定義建構子
    def __init__(self, a, b):
        self.a = a
        self.b = b

    # 定義實體方法
    def do_something(self):
        return self.a + self.b

    # 定義類別方法
    @classmethod
    def do_something2(cls, a, b):
        d = Demo(a, b)
        print(d.do_something())

# 呼叫類別方法
Demo.do_something2(1, 2)
Demo.do_something2(3, 4)
Demo.do_something2(5, 6)

# 檔名: class_demo14.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

單元 55 - 實體屬性與方法介紹如何定義實體方法及實體屬性。

這個例子的類別方法 do_something2() 使用實體方法 do_something() ,這樣是讓不用建立實體物件也能使用實體方法的功能,此例執行結果如下

> python class_demo14.py
3
7
11
>

參考資料

上一頁 單元 57 - 字串方法與布林方法
回 Python 簡易手冊 首頁
下一頁 單元 59 - 靜態方法
回 Python 教材首頁
回程式語言教材首頁