定義類別【使用 class】

  • 將物件比喻成塑膠盒,類別就是製造那個盒子的模具
    • string 是內建的 Python 類別,可製作如:'cat' 與 'duck' 等字串物件
    • Python 有「內建的類別」,可建立「標準的資料類型」,包括串列、字典
  • 要在 Python 中建立「自訂物件」,必須先使用「class 關鍵字」來定義類別

【範例】定義一個物件來表示個人資訊,每一個物件代表一個人

  1. 定義一個名為 person 的類別,來作為模具
  2. 嘗試建立多種類型版本,從最簡單的類別版本開始 → 可以實際作些事情的版本

空類別

要建立物件,這個定義是最精簡的程式

>>> 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

results matching ""

    No results matching ""