初學者指南:深入了解 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 類別的實體時,我們傳入了 nameage 兩個參數。
  • __init__ 方法將這些參數賦值給實體的屬性 self.nameself.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_numberbalance 屬性。
  • 我們還定義了 depositwithdraw 方法,用於操作帳戶餘額。

__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() 時的輸出格式。

注意事項

  1. __init__ 方法並非建構實體__init__ 方法是在實體創建後自動調用的初始化方法,不負責實際的實體創建。
  2. __new__ 方法__new__ 方法才是真正負責創建實體的特殊方法,但一般情況下我們不需要覆蓋它。
  3. self 參數__init__ 方法的第一個參數必須是 self,代表實體本身。
  4. 參數默認值:可以為 __init__ 方法的參數設置默認值,從而在創建實體時使某些參數變為可選。
   class Person:
       def __init__(self, name, age=18):
           self.name = name
           self.age = age
  1. 不能返回值__init__ 方法的返回值必須是 None,不應該使用 return 返回其他值。

結論

__init__ 方法是 Python 中的重要特殊方法,用於初始化新創建的實體。

透過 __init__ 方法,我們可以:

  • 設定實體的初始狀態和屬性。
  • 在創建實體時,傳遞必要的參數,確保實體處於已知狀態。
  • 提高程式的可讀性和可維護性。

理解並熟練使用 __init__ 方法,將有助於你更好地掌握 Python 的物件導向程式設計,編寫出更具結構性和可重用的程式碼。


進一步學習

  • 物件導向基礎:深入瞭解類別、實體、繼承、多型等概念。
  • 特殊方法:學習更多特殊方法的用法,如 __str____repr____len__ 等,提升類別的功能性。
  • 設計模式:學習常見的設計模式,如單例模式、工廠模式等,提升程式設計能力。
  • 進階主題:瞭解 __new__ 方法、元類(metaclass)等進階主題。

Similar Posts