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() 是把類別屬性 count 加 1 ,注意類別方法的預設參數 (parameter) 習慣上寫 cls , cls 可以直接存取類別屬性,然後在建構子 (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 |
> |