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的沙龍
160會員
315內容數
本業是影像辨識軟體開發,閒暇時間進修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
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
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+回溯法框架 白話的意思 # 列舉所以可能的情況,
Thumbnail
爬到頂樓的最小成本, 這題算是前面那題Climbing stairs的變形題,有點小變化, 但是稍微想一下還是能推導出來,算是很好的一維動態規劃1D DP練習題。
Thumbnail
爬到頂樓的最小成本, 這題算是前面那題Climbing stairs的變形題,有點小變化, 但是稍微想一下還是能推導出來,算是很好的一維動態規劃1D DP練習題。
Thumbnail
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
Thumbnail
這題乍看之下是新題目,但仔細一想, 其實只是前面介紹過的費式數列的小變形而已,解題思想基本不變。 題目說每次可以爬一階樓梯或兩階樓梯,問爬到n階的方法數是多少。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News