初學者指南:深入了解 Python 的 __init__ 方法
更新日期: 2024 年 10 月 11 日
在學習 Python 的物件導向程式設計(Object-Oriented Programming, OOP)時,類別(Class) 和 實體(Instance) 是兩個核心概念。
而在類別中,__init__
方法是一個非常重要的特殊方法,它負責初始化新創建的實體。
理解 __init__
方法的作用和使用方式,對於掌握 Python 的 OOP 至關重要。
本文將為新手詳細介紹 Python 中的 __init__
方法,解釋其作用、如何定義和使用,以及與其他方法的區別。
什麼是 __init__
方法?
__init__
方法是 Python 中的特殊方法,又稱為初始化方法或建構子(Constructor)。
當你創建一個類別的實體(Instance)時,__init__
方法會自動被調用,用於初始化實體的屬性,設定實體的初始狀態。
特點
- 名稱特殊:方法名為雙下劃線包圍的
__init__
,這是 Python 的命名規範,表示這是特殊方法。 - 自動調用:在創建實體時,無需手動調用
__init__
方法,Python 會自動執行。 - 初始化實體:用於設定實體的初始屬性,確保實體處於已知狀態。
定義和使用 __init__
方法
定義 __init__
方法
__init__
方法定義在類別內,第一個參數必須是 self
,後面可以根據需要添加其他參數。
class 類別名稱:
def __init__(self, 參數1, 參數2, ...):
# 初始化代碼
self.屬性1 = 參數1
self.屬性2 = 參數2
self
:代表實體本身,用於訪問實體的屬性和方法。- 其他參數:在創建實體時,需要傳入的值,用於初始化屬性。
創建實體並使用 __init__
方法
當你創建一個實體時,需要傳入 __init__
方法所需的參數。
實體名 = 類別名(參數1, 參數2, ...)
Python 會自動調用 __init__
方法,並將參數傳遞給它。
__init__
方法的參數
__init__
方法的參數可以根據需要進行設置,用於初始化實體的屬性。
示例
class Person:
def __init__(self, name, age):
self.name = name # 初始化屬性 name
self.age = age # 初始化屬性 age
def greet(self):
print(f"你好,我是 {self.name},今年 {self.age} 歲。")
# 創建實體
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
# 調用方法
person1.greet() # 輸出:你好,我是 Alice,今年 30 歲。
person2.greet() # 輸出:你好,我是 Bob,今年 25 歲。
- 在創建
Person
類別的實體時,我們傳入了name
和age
兩個參數。 __init__
方法將這些參數賦值給實體的屬性self.name
和self.age
。
示例:建立一個簡單的類別
定義一個銀行帳戶類別
class BankAccount:
def __init__(self, account_number, balance=0):
self.account_number = account_number # 帳戶號碼
self.balance = balance # 帳戶餘額,默認為 0
def deposit(self, amount):
self.balance += amount
print(f"存入 {amount} 元,當前餘額為 {self.balance} 元。")
def withdraw(self, amount):
if amount > self.balance:
print("餘額不足,無法提取。")
else:
self.balance -= amount
print(f"提取 {amount} 元,當前餘額為 {self.balance} 元。")
使用類別
# 創建銀行帳戶實體
account = BankAccount("1234567890", 1000)
# 存款
account.deposit(500) # 輸出:存入 500 元,當前餘額為 1500 元。
# 提款
account.withdraw(2000) # 輸出:餘額不足,無法提取。
account.withdraw(700) # 輸出:提取 700 元,當前餘額為 800 元。
- 在
__init__
方法中,我們初始化了account_number
和balance
屬性。 - 我們還定義了
deposit
和withdraw
方法,用於操作帳戶餘額。
__init__
方法與其他特殊方法
除了 __init__
方法外,Python 還有許多其他特殊方法,它們以雙下劃線包圍,用於實現特定的功能。
常見的特殊方法
__str__(self)
:定義實體被str()
或print()
調用時的返回值。__repr__(self)
:定義實體被repr()
調用時的返回值,通常用於調試。__del__(self)
:定義實體被刪除(回收)時的行為。__eq__(self, other)
:定義實體相等比較(==
)的行為。
示例:使用 __str__
方法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"姓名:{self.name},年齡:{self.age}"
person = Person("Alice", 30)
print(person) # 輸出:姓名:Alice,年齡:30
__str__
方法讓我們可以自定義實體在被print()
時的輸出格式。
注意事項
__init__
方法並非建構實體:__init__
方法是在實體創建後自動調用的初始化方法,不負責實際的實體創建。__new__
方法:__new__
方法才是真正負責創建實體的特殊方法,但一般情況下我們不需要覆蓋它。self
參數:__init__
方法的第一個參數必須是self
,代表實體本身。- 參數默認值:可以為
__init__
方法的參數設置默認值,從而在創建實體時使某些參數變為可選。
class Person:
def __init__(self, name, age=18):
self.name = name
self.age = age
- 不能返回值:
__init__
方法的返回值必須是None
,不應該使用return
返回其他值。
結論
__init__
方法是 Python 中的重要特殊方法,用於初始化新創建的實體。
透過 __init__
方法,我們可以:
- 設定實體的初始狀態和屬性。
- 在創建實體時,傳遞必要的參數,確保實體處於已知狀態。
- 提高程式的可讀性和可維護性。
理解並熟練使用 __init__
方法,將有助於你更好地掌握 Python 的物件導向程式設計,編寫出更具結構性和可重用的程式碼。
進一步學習
- 物件導向基礎:深入瞭解類別、實體、繼承、多型等概念。
- 特殊方法:學習更多特殊方法的用法,如
__str__
、__repr__
、__len__
等,提升類別的功能性。 - 設計模式:學習常見的設計模式,如單例模式、工廠模式等,提升程式設計能力。
- 進階主題:瞭解
__new__
方法、元類(metaclass)等進階主題。