Python 的 class 是什麼?為什麼要用它?

更新 發佈閱讀 8 分鐘

一、先說結論(先救腦袋)

很多人一開始學 Python 都會問:

class 是不是一定等於 OOP?」

「不用 class 是不是就不專業?」

✅ 正確答案是:

Python 的 class 主要是用來實現 OOP,

但在實務中,很多 class 並不是在玩「完整 OOP」。

class 是一種 工具,不是信仰。


二、如果不用 class,世界會怎樣?

先看一個不用 class 的例子:

def get_weather(city):
return 25

def get_advice(temp):
if temp > 30:
return "很熱"
return "還好"

temp = get_weather("Taipei")
advice = get_advice(temp)

這樣寫 完全沒問題,而且:

  • 好讀
  • 好測試
  • 好改

👉 那為什麼還要 class


三、class 出現,是為了解決「複雜度」

問題來了 👇

如果你的程式開始變成這樣:

  • 有很多相關的資料
  • 有很多行為「一定要搭配那些資料」
  • 狀態會改變
  • 邏輯會一直擴充

你會開始看到這種狀況:

temp = 25
humidity = 70
city = "Taipei"

def print_report(temp, humidity, city): ...
def save_report(temp, humidity, city): ...
def get_advice(temp, humidity): ...

👀 參數越來越多,開始痛了


四、class 的核心概念:把東西「包在一起」

這就是 class 最核心的價值

class WeatherReport:
def __init__(self, city, temp, humidity):
self.city = city
self.temp = temp
self.humidity = humidity

def get_advice(self):
if self.temp > 30:
return "很熱"
return "還好"

def print_report(self):
print(self.city, self.temp, self.humidity)

👉 資料 + 行為

👉 綁在一起

👉 這就叫 封裝(Encapsulation)


五、OOP 四大概念(但要用「人話」)

1️⃣ 封裝(Encapsulation)— 最重要

把「資料」跟「操作資料的方法」放在一起

report.get_advice()

你不用知道裡面怎麼算

你只要知道「我可以這樣用」


2️⃣ 繼承(Inheritance)— 最容易被濫用

class BaseAnalyzer:
def analyze(self):
pass
class ImageAnalyzer(BaseAnalyzer):
def analyze(self):
...

⚠️ 真實世界提醒:

能不用繼承,就不要用繼承

很多大型專案 寧願用組合(composition)

一句話先記住(超重要)

組合(composition)=「我 一個功能」

繼承(inheritance)=「我 一種東西」

而大型專案 討厭「我是」,偏好 「我有」

繼承為什麼在大型專案容易爆?

問題 1:強耦合

class BaseAnalyzer:
def load(self): ...
def analyze(self): ...
def save(self): ...
class ImageAnalyzer(BaseAnalyzer):
...

💥 問題來了:

  • BaseAnalyzer 一改
  • 所有子類一起炸
  • 很難只改「一小部分行為」

3️⃣ 多型(Polymorphism)— 真正實用的地方

for analyzer in analyzers:
analyzer.analyze()

👉 同一個介面

👉 不同實作

👉 Plugin / Pipeline 的靈魂


4️⃣ 抽象(Abstraction)— 規定「你該怎麼做」

from abc import ABC, abstractmethod

class Analyzer(ABC):
@abstractmethod
def analyze(self):
pass

👉 很適合大型專案

👉 但小專案不用硬上


六、重要觀念:不是所有 class 都是「OOP」

Python 裡 class 常見三種角色


🧺 1️⃣ 當資料容器(超常見)

from dataclasses import dataclass

@dataclass
class Config:
debug: bool
api_key: str

👉 幾乎沒有 OOP

👉 只是「結構化資料」


🧠 2️⃣ 當有狀態的物件

class Counter:
def __init__(self):
self.count = 0

def inc(self):
self.count += 1

👉 不複雜

👉 但很合理


🧰 3️⃣ 當 Service / Manager

class WeatherService:
def fetch(self, city):
...

👉 業界超多這種

👉 沒繼承、沒多型

👉 但非常實用


七、什麼時候「該用 class」?

✅ 用這張檢查表

如果你有 3 個以上,就該考慮 class

  • 有狀態要保存
  • 行為和資料密不可分
  • 之後會擴充
  • 需要被測試 / mock
  • 不同實作共用介面

八、什麼時候「不要用 class」?

❌ 純計算

❌ 沒有狀態

❌ 一次性腳本

❌ 為了看起來高級

def add(a, b):
return a + b

👉 這就是最好的寫法


九、給初學者最重要的一句話

先寫好 function

再考慮要不要變成 class

真正專業的工程師,不是「一開始就 OOP」,

而是 知道什麼時候該抽象


十、總結

  • class 是工具,不是目標
  • OOP 是為了管理複雜度
  • Python 很自由,不需要教條式 OOP
  • 好程式碼的標準是:
    👉 好讀、好改、好除錯
留言
avatar-img
螃蟹_crab的沙龍
162會員
318內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2026/02/02
用 AI 幫你「讀資料、整理重點、變成你的第二顆腦」 左邊為輸入來源,中間你可以跟他對話來產生內容及記事,右邊像工作室,可以根據你的需求產生報告影片摘用等等。 以下是利用它來產生影片上傳到YT的Python基礎影片。 不多不說,內容真讓人驚豔,幾分鐘就將程式語言的概念解釋得清清楚楚。 htt
Thumbnail
2026/02/02
用 AI 幫你「讀資料、整理重點、變成你的第二顆腦」 左邊為輸入來源,中間你可以跟他對話來產生內容及記事,右邊像工作室,可以根據你的需求產生報告影片摘用等等。 以下是利用它來產生影片上傳到YT的Python基礎影片。 不多不說,內容真讓人驚豔,幾分鐘就將程式語言的概念解釋得清清楚楚。 htt
Thumbnail
2026/02/01
一、物件導向(OOP)到底在解決什麼? 一句話版本: 把「資料 + 行為」包在一起,讓程式像真實世界一樣被理解與維護 沒用 OOP 時(程序式) user_name = "Tom" user_age = 20 def say_hi(name): print(f"Hi {name}"
2026/02/01
一、物件導向(OOP)到底在解決什麼? 一句話版本: 把「資料 + 行為」包在一起,讓程式像真實世界一樣被理解與維護 沒用 OOP 時(程序式) user_name = "Tom" user_age = 20 def say_hi(name): print(f"Hi {name}"
2026/02/01
—— 用一個專案學會流程控制、函式、字串與 API 思維 在這個教學中,我們將透過一個 **「Python 自動氣象播報員」**的小專案,學會多個非常重要的 Python 基礎觀念,包括: ✅ 函式(Function) ✅ 條件判斷(if / elif / else) ✅ 字串處理(Str
2026/02/01
—— 用一個專案學會流程控制、函式、字串與 API 思維 在這個教學中,我們將透過一個 **「Python 自動氣象播報員」**的小專案,學會多個非常重要的 Python 基礎觀念,包括: ✅ 函式(Function) ✅ 條件判斷(if / elif / else) ✅ 字串處理(Str
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
Thumbnail
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
給定兩個輸入整數陣列, 若在兩個陣列遇到相同的數字可以連成一線, 但是有規定連線不可和別的連線有交叉, 請問最多可以形成幾條連線? 解答中探討了演算法化簡的技巧和DP模型, 可以透過演算法化簡的技巧, 把這題映射到原本已經學會的Longest Common Subsequence的DP模型來解開。
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News