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的沙龍
167會員
322內容數
本業是影像辨識軟體開發,閒暇時間進修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
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
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
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
Thumbnail
題目敘述 House Robber III 題目會給我們一個二元樹, 二元樹裡的每個節點分別代表每棟房屋的價值,也就是房屋內有的現金數量。 題目敘述給的情境是假想盜賊要偷東西,限制是上下相鄰樓層的兩棟房屋不能一起偷,只能選擇其中一棟,否則就會觸發警報器。 請問盜賊可以得手的最大金額是多少?
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 組合數之和 Combination Sum 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所以可能的情況,
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News