CodeGym /Java Adesua /Python SELF TW /對象初始化

對象初始化

Python SELF TW
等級 15 , 課堂 4
開放

4.1 初始化

通常在創建後,對象還沒有準備好工作。我們需要先傳遞所有必要的數據給它們:運行參數、初始值、其他對象的引用等。

這個過程稱為初始化,應該在創建對象後立即進行。

假設你有一個類別-貓 (Cat),你想要給它設定名字和年齡,可以用幾種方法來完成:

創建對象後初始化屬性

在這個例子中首先創建了:

  • 一個空的 Cat 對象。
  • 一個名為 barsikCat 類的實例。
  • 再為 barsik 對象設置兩個屬性:nameage 直接加到對象上。


class Cat:
    pass
        

# 創建 Cat 對象
barsik = Cat()
        
# 創建對象後初始化屬性
barsik.name = "Barsik"
barsik.age = 5
        
print(f"貓的名字: {barsik.name}, 年齡: {barsik.age}")  # 輸出: 貓的名字: Barsik, 年齡: 5

使用方法初始化屬性

在這個例子中使用方法 initialize 來初始化屬性。Cat 對象在沒有任何屬性的情況下創建,然後使用方法 initialize() 設置屬性值。


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# 創建 Cat 對象
barsik = Cat()
        
# 通過方法初始化屬性
barsik.initialize("Barsik", 5)
        
print(f"貓的名字: {barsik.name}, 年齡: {barsik.age}")  # 輸出: 貓的名字: Barsik, 年齡: 5

使用類別屬性

在這個例子中屬性 nameage 定義在類別級別上。創建 barsik 對象後直接初始化屬性。


class Cat:
    name = ""
    age = 0
        

# 創建 Cat 對象
barsik = Cat()
        
# 初始化對象屬性
barsik.name = "Barsik"
barsik.age = 5
        
print(f"貓的名字: {barsik.name}, 年齡: {barsik.age}")  # 輸出: 貓的名字: Barsik, 年齡: 5

哪種方法最好?沒有任何一種!最好的辦法是使用構造函數 :)

4.2 構造函數

構造函數 是一種特殊的方法,它 會自動 在創建新對象時被調用。構造函數用來初始化對象的屬性,可以執行對象配置所需的任何初始動作。

在 Python 中,構造函數是名為 __init__ 的方法。以下是一些它的基本事實:

  • 方法 __init__ 是 Python 的構造函數。它 自動 在創建類別的新實例時被調用。
  • __init__ 至少需要一個參數—self,它指向當前創建的對象。除此之外,可以傳遞其他參數 來初始化對象的屬性。
  • 方法 __init__ 中,可以使用 self 設定對象屬性的初始值。
  • 構造函數可以執行任何配置對象所需的動作,例如檢查輸入數據或設置與其他對象的關聯。

參數會自動傳遞給構造函數,你只需要在創建對象時將它們放在圓括號內。

以下是使用構造函數初始化我們的貓的示例:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# 使用名字和年齡創建 Cat 對象
barsik = Cat("Barsik", 5)

print(f"貓的名字: {barsik.name}, 年齡: {barsik.age}")  # 輸出: 貓的名字: Barsik, 年齡: 5

在創建 Cat 類型的對象後,__init__ 方法會自動被調用,並會傳遞三個參數:

  • barsik 對象的引用傳遞給參數 self
  • 字符串「Barsik」傳遞給參數 name
  • 數字 5 傳遞給參數 age

這樣既方便又美觀。

數據驗證

在構造函數中也可以進行數據驗證。畢竟構造函數的目的是形成一個有效(正確)的對象,以便於後續操作。示例:


class Cat:
    def __init__(self, name, age):
        if age < 0:
            raise ValueError("年齡不能是負數")
        self.name = name
        self.age = age


# 創建 Cat 對象並檢查年齡
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # 輸出: 年齡不能是負數
               
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION