物件導向程式設計(OOP)是一種強大的編程範式,透過將程式組織成物件與類別,讓程式更具結構性、可重用性與擴展性。今天,我們將深入學習 OOP 的基本概念,並了解如何在 Python 中應用這些原則來開發更具模組化和靈活性的程式架構。
OOP 是基於物件(實例化的類別)與類別(物件的模板)的設計方式。在 OOP 中,我們將程式中的實體(如動物、汽車、帳戶等)轉化為物件,並賦予它們屬性和行為。這樣的設計方式模擬現實世界,讓程式碼更具可讀性和可維護性。
OOP 的四大支柱:
在 Python 中,我們使用 class
關鍵字來定義類別,並透過這個類別來創建物件。每個物件都是這個類別的實例,它擁有類別所定義的屬性和方法。
範例:建立一個城市的類別
class City:
def __init__(self, name, population):
self.name = name # 屬性: 城市名稱
self.population = population # 屬性: 城市人口
def describe(self):
print(f"{self.name} 的人口是 {self.population} 人")
def grow_population(self, increase):
self.population += increase
# 創建物件
city1 = City("台北", 2500000)
city2 = City("台中", 2800000)
# 使用物件方法
city1.describe()
city2.grow_population(50000)
city2.describe()
在這個範例中,City
類別有兩個屬性:城市名稱和人口,並且有兩個方法:描述城市與增加人口。我們創建了兩個城市物件 city1
和 city2
,並透過這些物件來操作屬性。
繼承是一個強大的 OOP 概念,允許一個類別繼承另一個類別的屬性和方法,從而避免重複編寫相似的程式碼。
範例:擴展城市類別
class CapitalCity(City):
def __init__(self, name, population, country):
super().__init__(name, population) # 繼承父類別的屬性
self.country = country # 新增屬性: 國家
def describe_capital(self):
print(f"{self.name} 是 {self.country} 的首都,人口是 {self.population} 人")
# 創建首都城市的物件
capital = CapitalCity("台北", 2500000, "台灣")
capital.describe_capital()
在這裡,我們創建了一個 CapitalCity
類別,繼承了 City
的屬性和方法,並額外增加了國家的屬性及描述首都的方法。透過繼承,我們可以更靈活地擴展功能。
多型允許我們在子類別中重寫父類別的方法,以實現不同的行為。
範例:重寫方法
class City:
def describe(self):
print(f"這是一個城市")
class CapitalCity(City):
def describe(self):
print(f"這是一個首都")
city = City()
capital = CapitalCity()
city.describe() # 輸出: 這是一個城市
capital.describe() # 輸出: 這是一個首都
在這個範例中,我們透過方法重寫實現了多型,不同類別有著各自獨特的行為,但可以使用相同的介面。
模組是 Python 中將程式碼進行組織和重用的一種方式。透過模組化,我們可以將類別和函數分別存放在不同的檔案中,並在需要時導入使用,這樣程式碼的結構更清晰,也更容易維護。
範例:模組化城市類別
city.py
檔案,並在其中定義城市類別。# city.py
class City:
def __init__(self, name, population):
self.name = name
self.population = population
def describe(self):
print(f"{self.name} 的人口是 {self.population} 人")
# main.py
from city import City
city1 = City("台南", 1800000)
city1.describe()
透過物件導向程式設計,我們可以將複雜的問題拆解成小型的、可管理的物件,從而提高程式碼的可維護性和可擴展性。OOP 的四大支柱:封裝、繼承、多型與抽象,讓我們能夠靈活地設計和開發 Python 程式,並透過模組化的方式提升專案的結構和重用性。
掌握物件導向程式設計,將大幅提升我們的程式開發技能,讓我們的 Python 專案更具規模化與專業性。