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
>

有關參數列的設計技巧,請參考以下的單元

參考資料

上一頁 單元 54 - 類別
回 Python 簡易手冊 首頁
下一頁 單元 56 - 建構子與解構子
回 Python 教材首頁
回程式語言教材首頁