定義類別【使用 class】
- 將物件比喻成塑膠盒,類別就是製造那個盒子的模具
- string 是內建的 Python 類別,可製作如:'cat' 與 'duck' 等字串物件
- Python 有「內建的類別」,可建立「標準的資料類型」,包括串列、字典
- 要在 Python 中建立「自訂物件」,必須先使用「class 關鍵字」來定義類別
【範例】定義一個物件來表示個人資訊,每一個物件代表一個人
- 定義一個名為 person 的類別,來作為模具
- 嘗試建立多種類型版本,從最簡單的類別版本開始 → 可以實際作些事情的版本
空類別
要建立物件,這個定義是最精簡的程式
>>> class 類別名稱():
pass
>>> class Person():
pass
# 如同函式,需要用 pass 來說明這個類別是空的
# 要建立物件,這個定義是最精簡的程式
用類別建立物件時,請呼叫類別的名稱(就像它是函式一般)
物件 = 類別名稱()
# Person() 會用 Person 類別來建立一個獨立的物件,並指派名稱 someone 給它
# Person 類別是空的,所以它產生的 someone 物件只會閒在那邊,什麼事都不能做
>>> someone = Person()
加入特殊的 Python 物件初始方法 __init__
- 這就是在實際的 Python 類別定義中看到的東西
- __init__() 是特殊的 Python 名稱,代表一個方法 → 這個方法會用它的「類別定義」來「初始化」一個單一物件
>>> class 類別名稱():
def __init__(引數):
pass
>>> class Person():
def __init__(self): # __init__() 是特殊的 Python 名稱,代表一個方法 → 這個方法會用它的「類別定義」來「初始化」一個單一物件
pass
# self 引數說明它參考至自己本身這個物件
# 當在類別定義式中定義 __int__() 時,它的第一個參數必須是 self → self 不是 Python 的保留字,但這是一種慣例
# 如果使用 self 的話,以後的人閱讀你的程式時,就不需要猜測你的意思了(包括你自己)
# 使用此 Person 定義式,也無法建立一個真的能做事的物件
真正展示如何在 Python 中建立一個簡單的物件【在「初始化方法」中添加「參數」】
- 這個新物件就像任何其他的 Python 物件
- 可以將它當成「串列、tuple、字典或集合的元素」
- 可以將它當成「引數」傳給「函式」,或當成「結果」來回傳
>>> class 類別名稱():
def __init__(參數1, 參數2):
參數1.參數2 = 參數2
>>> 指派名稱 = 類別名稱('字串')
>>> class Person():
def __init__(self, name):
self.name = name
# 傳遞一個字串給 name 參數,用 Person 類別來建立一個物件
>>> hunter = Person('Elmer Fudd')
- 以下是這一行程式所做的事情:
- 查看 Person 類別的定義
- 在記憶體中實例化(建立)一個新物件
- 呼叫該物件的 __init__ 方法,傳遞新物件給 self,以及另一個引數('Elmer Fudd')給 name
- 在物件中儲存 name 的值
- 回傳新物件
- 將名稱 hunter 指派給物件
傳入的 name 值 → 會被當成屬性,與物件一起被儲存 → 可以直接讀寫或寫入它
>>> class 類別名稱():
def __init__(參數1, 參數2):
參數1.參數2 = 參數2
>>> 指派名稱 = 類別名稱('字串')
>>> print('文字: ', 指派名稱.參數2)
文字: 字串
# 在 Person 類別定義式「裡面」,可以用 self.name 來存取 name 屬性
# 並非所有的「類別定義式」都要有一個 __init__ 方法,它的用途是為了協助分辨「同一個類別」製造出來的物件
>>> class Person():
def __init__(self, name):
self.name = name
>>> hunter = Person('Elmer Fudd')
# 當建立一個實際的物件,例如 hunter 時,要用 hunter.name 來參考它
>>> print('The mighty hunter: ', hunter.name)
The mighty hunter: Elmer Fudd