4.1 初始化
通常在創建後,對象還沒有準備好工作。我們需要先傳遞所有必要的數據給它們:運行參數、初始值、其他對象的引用等。
這個過程稱為初始化,應該在創建對象後立即進行。
假設你有一個類別-貓 (Cat)
,你想要給它設定名字和年齡,可以用幾種方法來完成:
創建對象後初始化屬性
在這個例子中首先創建了:
- 一個空的
Cat
對象。 - 一個名為
barsik
的Cat
類的實例。 - 再為 barsik 對象設置兩個屬性:
name
和age
直接加到對象上。
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
使用類別屬性
在這個例子中屬性 name
和 age
定義在類別級別上。創建 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) # 輸出: 年齡不能是負數
GO TO FULL VERSION