Python - 建構子:物件基礎的建造

歡迎您,有抱負的 Python 程式設計師!今天,我們將深入探討令人著迷的建構子世界。如果您是程式設計新手,也請不用擔心;我會一步步引導您了解這個概念,就像我過去幾年教學中以數不清的學生一樣。所以,拿起您最喜歡的飲料,放鬆身心,讓我們一起踏上這段激動人心的旅程!

Python - Constructors

建構子是什麼?

在我們深入細節之前,先來了解建構子是什麼。想像您正在建造一棟房子。建構子就像是藍圖與最初的奠基過程的結合。當您創建一個新的物件(或稱為「實例」)的類別時,它是一個被調用的特殊方法。

在 Python 中創建建構子

在 Python 中,建構子是使用特殊方法 __init__() 創建的。當您創建一個類別的新物件時,這個方法會自動被調用。

讓我們從一個簡單的例子開始:

class House:
def __init__(self):
print("一棟新房子正在建造中!")

my_house = House()

當您運行這段程式碼時,您會看到消息 "一棟新房子正在建造中!" 被列印出來。這是因為當我們創建 my_house 時,__init__() 方法會自動被調用。

Python 中的建構子類型

現在,讓我們來探索 Python 中不同類型的建構子。主要分為兩種:

  1. 預設建構子
  2. 帶參數的建構子

Python 中的預設建構子

一個預設建構子是不接受任何參數(除了 self)的建構子。如果您在您的類別中未定義任何建構子,Python 將自動提供一個預設建構子。

class Dog:
def __init__(self):
self.breed = "未知"
self.age = 0

my_dog = Dog()
print(f"我的狗的品種:{my_dog.breed}")
print(f"我的狗的年齡:{my_dog.age}")

在這個例子中,我們創建的每個 Dog 物件都會將其品種設定為 "未知" ,年齡設定為 0 作為預設值。

帶參數的建構子

一個帶參數的建構子接受參數,允許我們在創建物件時使用特定的值初始化物件的屬性。

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

my_cat = Cat("Whiskers", "Orange")
print(f"我的貓的名字是 {my_cat.name} ,它是 {my_cat.color}。")

在這裡,我們在創建 Cat 物件時傳遞 "Whiskers" 和 "Orange" 作為參數。建構子使用這些來設定 namecolor 屬性。

Python - 實例方法

實例方法是指屬於類別的函數,可以存取和修改物件的屬性。它們總是將 self 作為其第一個參數。

class Bird:
def __init__(self, species):
self.species = species
self.can_fly = True

def describe(self):
if self.can_fly:
return f"我是一隻 {self.species} ,我能飛!"
else:
return f"我是一隻 {self.species} ,但我不能飛。"

def set_flying_ability(self, can_fly):
self.can_fly = can_fly

parrot = Bird("鸚鵡")
print(parrot.describe())  # 輸出:我是一隻鸚鵡,我能飛!

penguin = Bird("企鵝")
penguin.set_flying_ability(False)
print(penguin.describe())  # 輸出:我是一隻企鵝,但我不能飛。

在這個例子中,describe()set_flying_ability() 是實例方法。它們可以使用 self 存取和修改物件的屬性。

Python 多個建構子

Python 不支持傳統意義上的方法重載,所以我們不能有 多個 __init__() 方法。然而,我們可以使用類方法模擬多個建構子。

class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width

@classmethod
def create_square(cls, side_length):
return cls(side_length, side_length)

def area(self):
return self.length * self.width

rect = Rectangle(4, 5)
print(f"長方形面積:{rect.area()}")  # 輸出:長方形面積:20

square = Rectangle.create_square(4)
print(f"正方形面積:{square.area()}")  # 輸出:正方形面積:16

在這裡,create_square() 是一個類方法,它作為創建正方形的替代建構子。

結論

建構子在 Python 中是物件創建的守門人。它們為我們的物件將如何行為以及它們將包含哪些數據設定舞台。當您繼續 Python 的旅程時,您會發現建構子是在創建健壯且靈活的程式碼時無價的工具。

請記住,孰能生巧!嘗試創建您自己的具有不同類型建構子的類別。實驗實例方法和替代建構子。您越多使用這些概念,它們就會變得越自然。

編程愉快,未來的 Python 達人!??

方法 描述 示例
__init__(self, ...) 建構子方法,創建新物件時被調用 def __init__(self, name): self.name = name
實例方法 可以存取和修改物件屬性的常規方法 def describe(self): return f"我是 {self.name}"
@classmethod 創建替代建構子或類別級別方法的裝飾器 @classmethod def create_default(cls): return cls("Default")
@staticmethod 不需要存取類別或實例屬性的方法的裝飾器 @staticmethod def validate_name(name): return len(name) > 0

Credits: Image by storyset