在學習 Python 的過程中,很多人一開始會從變數、資料型別與函數開始。
當我們開始處理更複雜的程式時,就需要一種更有組織性的方式來管理程式碼。
這時候,「物件導向程式設計(Object-Oriented Programming, OOP)」就登場了。
在 OOP 當中,最核心的概念就是 類別(Class)。類別可以看作是一份藍圖,用來描述資料的結構與行為;
而依照這份藍圖所建立的實體,則被稱為 物件(Object)。透過類別與物件,我們不僅能讓程式更有條理,也能讓程式碼更容易重用與擴展。
資料型別基礎
Python 提供了多種存儲資料的方式。每種資料都有其特定的型別(Type),決定了可以對其執行的操作。
a_string = "Cool String"
an_int = 12
print(type(a_string)) # 輸出 ""
print(type(an_int)) # 輸出 ""
使用 type()
函數可以檢查變數的型別。不同型別支援不同的操作—例如,不能對整數使用字串方法,也不能將兩個字典相加。

什麼是類別?
類別 (Class) 是資料型別的模板,描述了這種型別將持有的資訊以及程式設計師如何與這些資料互動。使用 class
關鍵字定義類別。
根據 Python 編碼風格指南 (PEP 8),類別名稱應採用大寫字母開頭,以便於識別。
class CoolClass:
pass
上面的例子中,我們創建了一個名為 CoolClass
的類別。我們使用 pass
關鍵字表示類別主體有意留空,以避免縮排錯誤。
物件導向程式設計 (OOP)
類別的實例也被稱為物件 (Object)。定義類別並創建物件來表示程式職責的模式稱為物件導向程式設計。
print(type(cool_instance))
# 輸出 ""
使用 type()
函數可以確認物件的類別。在 Python 中,__main__
表示「當前運行的文件」,因此可以理解為「在當前腳本中定義的 CoolClass 類別」。
物件導向程式設計是組織代碼的強大方式,可以提高可讀性、可維護性和代碼重用性。

類別變數
什麼是類別變數?
當我們希望同一數據對類別的每個實例都可用時,使用類別變數。類別變數對於該類別的每個實例都是相同的。
如何定義和訪問
在類別定義的縮排部分中定義類別變數,並使用 object.variable
語法訪問物件的所有類別變數。
class Musician:
title = "Rockstar"
drummer = Musician()
print(drummer.title) # 輸出 "Rockstar"
guitarist = Musician()
print(guitarist.title) # 也輸出 "Rockstar"
在上面的例子中,title
是類別變數,對 Musician
類別的所有實例都具有相同的值。
方法 – 類別中的函數
方法 (Methods) 是定義為類別一部分的函數。方法中的第一個參數始終是調用該方法的物件。按照慣例,我們將這個第一個參數命名為 self
。
class Dog:
dog_time_dilation = 7
def time_explanation(self):
print("Dogs experience {} years for every 1 human year.".format(self.dog_time_dilation))
pipi_pitbull = Dog()
pipi_pitbull.time_explanation() # 輸出 "Dogs experience 7 years for every 1 human year."
在上例中,我們創建了一個帶有 time_explanation
方法的 Dog
類別。注意,調用方法時我們沒有傳遞任何參數,但在函數體內可以引用 self
。這是因為當調用方法時,會自動將調用該方法的物件作為第一個參數傳遞。
屬性函數
實例變數和類別變數在 Python 中的訪問方式類似。這不是偶然的,它們都被視為物件的屬性 (Attributes)。如果我們嘗試訪問既不是類別變數也不是物件實例變數的屬性,Python 將拋出 AttributeError
。
hasattr() 函數
如果物件具有給定屬性,則返回 True
,否則返回 False
。
hasattr(object, "attribute")
getattr() 函數
返回給定物件和屬性的值。可以提供第三個參數作為默認值,如果物件沒有給定屬性,則返回此默認值。
getattr(object, "attribute", default)
hasattr(attributeless, "fake_attribute") # 返回 False
getattr(attributeless, "other_fake_attribute", 800) # 返回 800,默認值
理解 self 關鍵字
self
關鍵字是 Python 中物件導向程式設計的核心。它指的是調用方法的物件本身,使方法能夠訪問和修改該物件的實例變數和類別變數。
class SearchEngineEntry:
def __init__(self, url):
self.url = url
codecademy = SearchEngineEntry("www.codecademy.com")
wikipedia = SearchEngineEntry("www.wikipedia.org")
print(codecademy.url) # 輸出 "www.codecademy.com"
print(wikipedia.url) # 輸出 "www.wikipedia.org"
建構子使用傳入的參數創建實例變數,使每個物件都能維護自己的狀態。這是物件導向程式設計的強大之處—能夠創建具有相同行為但持有不同數據的多個物件。
總結
學習 Python 的 class 與物件導向程式設計,能幫助我們把程式碼寫得更有結構,也更容易維護。
- 類別:提供了設計資料型別的模板
- 物件:是類別的具體實例
- 類別變數與實例變數:讓我們能區分共享資料與獨立資料
- 方法與 self:幫助我們設計物件的行為,並操作其屬性
掌握這些基礎後,你已經能開始設計屬於自己的類別,並在程式中建立出更符合邏輯的模組化結構。
