![](../../img/interpret.jpg)
Python 簡易手冊
單元 55 - 實體屬性與方法
類別 (class) 內可以定義方法 (method) 跟屬性 (attribute) ,實體方法 (instance method) 的定義方式跟函數 (function) 類似,差別是實體方法必須放在類別的縮排範圍,並且有預設參數 (parameter) self ,實體屬性則 (instance attribute) 是在實體方法中用 self 加上小數點 . 定義,舉例如下
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 do_something(self): # 定義實體屬性 self.a = 0 # 定義執行工作的實體方法 def print_something(self): # 印出實體屬性 print(self.a) # 建立物件 a = Demo() # 呼叫實體方法 a.do_something() # 呼叫實體方法 a.print_something() # 檔名: class_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 54 - 類別介紹類別的基本概念。
除了實體屬性跟實體方法,還有類別屬性 (class attribute) 、類別方法 (class method) 與靜態方法 (static method) ,單元 58 - 類別屬性與類別方法會介紹類別屬性與類別方法,單元 59 - 靜態方法會介紹靜態方法。
此例 Demo 類別定義了兩個實體方法,第 4 行 do_something() 建立實體屬性 a ,注意實體屬性在實體方法內要寫成 self.a
3 4 5 6 | # 定義建立實體屬性的實體方法 def do_something(self): # 定義實體屬性 self.a = 0 |
這裡 self 是識別字 (identifier) ,習慣上是寫 self ,就字面意義來說就是代表物件自己。
第 9 行 print_something() 則是印出實體屬性 a
8 9 10 11 | # 定義執行工作的實體方法 def print_something(self): # 印出實體屬性 print(self.a) |
底下執行部分是建立 Demo 型態的變數 a ,然後依次呼叫兩個實體方法,這裡要注意,如果沒有先呼叫 do_something() ,屬性 a 就不會被建立,先執行 print_something() 就會出錯,此例執行結果如下
> python class_demo2.py |
0 |
> |
一般來說,實體屬性習慣上會在建構子 (constructor) 中設定,單元 56 - 建構子與解構子會介紹如何定義建構子。
實體方法跟函數類似,都可以定義參數列 (parameter list) 與回傳值 (return value) ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 定義類別 class Demo: # 定義有其他參數的實體方法 def do_something(self, a): # 回傳參數 return a # 建立物件 a = Demo() # 印出實體方法回傳值 print(a.do_something(10)) # 檔名: class_demo3.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
這個例子的 do_something() 參數列包括預設的 self 及額外定義的 a ,方法內容則是用 return 回傳 a ,底下建立物件後就呼叫 do_something() ,執行結果如下
> python class_demo3.py |
10 |
> |
有關參數列的設計技巧,請參考以下的單元
參考資料
![](../../img/pydoing.gif)