Python 類別教學:用一間披薩店,一次搞懂三種方法(self / cls / staticmethod)

更新 發佈閱讀 7 分鐘

在學 Python 的 class 時,很多人都會卡在同一個問題:

❓ 為什麼有的方法要寫 self


❓ 有的要寫 cls


❓ 有的卻什麼都不用?


這不是你不會寫,而是你還沒看懂「責任層級」

可以參考我的影片 或者接下去看文字的部分。


今天我們用一個「連鎖披薩店」的例子,一次把這三種方法講透


一、先看完整範例(等等會一行一行拆)

class Pizza:
total_sold = 0 # 類別屬性:統計全台總銷量

def __init__(self, topping):
self.topping = topping # 實體屬性:這份披薩的配料
Pizza.total_sold += 1

# 1. 實體方法 (Instance Method)
def describe_pizza(self):
print(f"這是一份配料為 {self.topping} 的美味披薩!")

# 2. 類別方法 (Class Method)
@classmethod
def get_total_sold(cls):
print(f"📢 總部報告:全台目前已售出 {cls.total_sold} 份披薩。")

# 3. 靜態方法 (Static Method)
@staticmethod
def is_healthy(ingredient):
healthy_list = ["菠菜", "番茄", "青椒"]
return ingredient in healthy_list

二、先建立一個正確的「心智模型」

在理解語法前,請先記住這張表(非常重要)👇

方法類型在現實中像什麼關心的是誰Instance Method這一份披薩某一個物件Class Method披薩總部整個類別Static Method工具 / 計算機誰都不屬於

👉 method 的差異,不是語法,是「責任歸屬」


三、Instance Method(實體方法):處理「這一個」

程式碼

def describe_pizza(self):
print(f"這是一份配料為 {self.topping} 的美味披薩!")

為什麼一定要有 self

因為你在問的是:

這一份披薩是什麼?」

p1 = Pizza("起司")
p2 = Pizza("菠蘿")

p1.describe_pizza()
p2.describe_pizza()

輸出會不同,因為:

  • self 指向的是 不同的披薩物件
  • 每個物件都有自己的 topping

📌 self = 物件的身份證

沒有它,Python 不知道你在跟誰說話。


四、Class Method(類別方法):處理「整體規則」

程式碼

@classmethod
def get_total_sold(cls):
print(f"📢 總部報告:全台目前已售出 {cls.total_sold} 份披薩。")

為什麼這裡用 cls,而不是 self

因為這個問題是:

「全台一共賣了幾份披薩?」

這跟「某一份披薩」完全無關。

Pizza.get_total_sold()

你是在問 披薩這個類別本身的狀態,也就是:

total_sold = 0

📌 cls 代表的是「這個類別本身」

而不是任何一個實體。


常見錯誤(一定要知道)

❌ 這樣寫雖然能跑,但設計很怪:

def get_total_sold(self):
return Pizza.total_sold

工程師會皺眉,因為:

你明明在問「總部資料」,

為什麼要拿「某一份披薩」來問?

五、Static Method(靜態方法):純工具,不屬於任何人

程式碼

@staticmethod
def is_healthy(ingredient):
healthy_list = ["菠菜", "番茄", "青椒"]
return ingredient in healthy_list

關鍵特徵

  • ❌ 不用 self
  • ❌ 不用 cls
  • ❌ 不讀任何 class / instance 資料
Pizza.is_healthy("菠菜")

那為什麼要放在 class 裡?

這是一個語意選擇

「這個工具,跟披薩這個概念有關。」

📌 如果哪天它跟 Pizza 沒關係了,

👉 它就應該搬出去,變成普通 function。


六、三種方法的「快速判斷法」(請記這個)

當你在寫 method 時,問自己這三個問題👇

✅ 判斷流程

1️⃣ 我需不需要知道「這是誰」?

→ 要 → Instance Method (self)

2️⃣ 我是在處理「全體共用的狀態或規則」?

→ 要 → Class Method (cls)

3️⃣ 我只是提供一個小工具?

→ 是 → Static Method


七、實戰測試程式碼解析

p1 = Pizza("起司")
p2 = Pizza("菠蘿")

每建立一個 Pizza:

  • __init__ 被呼叫
  • Pizza.total_sold += 1

p1.describe_pizza()

👉 跟「這一份披薩」有關

👉 Instance Method


Pizza.get_total_sold()

👉 跟「所有披薩」有關

👉 Class Method


Pizza.is_healthy("菠菜")

👉 不需要披薩、也不需要總部

👉 Static Method



八、為什麼這樣分,程式會「比較不亂」?

因為你在替未來的自己留下線索:

  • Instance Method:
    「這是某個物件的行為」
  • Class Method:
    「這是整個系統的規則」
  • Static Method:
    「這只是工具,不要亂依賴它」

📌 這就是高 cohesion(高內聚)的設計

留言
avatar-img
螃蟹_crab的沙龍
160會員
315內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2026/02/02
一、先說結論(先救腦袋) 很多人一開始學 Python 都會問: 「class 是不是一定等於 OOP?」 「不用 class 是不是就不專業?」 ✅ 正確答案是: Python 的 class 主要是用來實現 OOP, 但在實務中,很多 class 並不是在玩「完整 OOP」。 cl
2026/02/02
一、先說結論(先救腦袋) 很多人一開始學 Python 都會問: 「class 是不是一定等於 OOP?」 「不用 class 是不是就不專業?」 ✅ 正確答案是: Python 的 class 主要是用來實現 OOP, 但在實務中,很多 class 並不是在玩「完整 OOP」。 cl
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}"
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
2024 年,全球資本市場親眼看到一家公司「加速換檔」: Eli Lilly and Company(禮來)的市值,從年初三千多億美元,一路衝到五千多億美元。 進入 2025 年後,這個漲勢不但沒有停,反而進一步加速——第三季財報發布後短短兩週,禮來市值又從約 7,406 億美元跳到接近 9,7
Thumbnail
2024 年,全球資本市場親眼看到一家公司「加速換檔」: Eli Lilly and Company(禮來)的市值,從年初三千多億美元,一路衝到五千多億美元。 進入 2025 年後,這個漲勢不但沒有停,反而進一步加速——第三季財報發布後短短兩週,禮來市值又從約 7,406 億美元跳到接近 9,7
Thumbnail
CSS 是用來設計 HTML 文件樣式 的語言,負責 「樣式呈現」的部分,如 字體、顏色、排版、動畫效果等。它決定了 HTML 元素應如何在螢幕上顯示,讓網頁更加美觀且具有吸引力。 本文章內容涵蓋 CSS 的三種引入方式、CSS 的基本設定、盒子模型與 class 選擇器,帶你快速踏入CSS的大門。
Thumbnail
CSS 是用來設計 HTML 文件樣式 的語言,負責 「樣式呈現」的部分,如 字體、顏色、排版、動畫效果等。它決定了 HTML 元素應如何在螢幕上顯示,讓網頁更加美觀且具有吸引力。 本文章內容涵蓋 CSS 的三種引入方式、CSS 的基本設定、盒子模型與 class 選擇器,帶你快速踏入CSS的大門。
Thumbnail
  電影立即免費看-弱美男英雄Class 2 開播日期:2025年 播出平台:Netflix 編劇:劉秀民、樸賢佑 導演:劉秀民 主演:樸志訓、厲雲、崔民英、劉秀彬、裴奈拏、李敏宰、李濬榮 劇情介紹: 該劇講述為了朋友而對抗暴力,但最終沒能守護朋友而留下心理創傷的模範生延時恩
Thumbnail
  電影立即免費看-弱美男英雄Class 2 開播日期:2025年 播出平台:Netflix 編劇:劉秀民、樸賢佑 導演:劉秀民 主演:樸志訓、厲雲、崔民英、劉秀彬、裴奈拏、李敏宰、李濬榮 劇情介紹: 該劇講述為了朋友而對抗暴力,但最終沒能守護朋友而留下心理創傷的模範生延時恩
Thumbnail
話說有了帳戶,日後賺得錢就有地方放了;有了「Go card」,在昆士蘭就可以暢行無阻。 但要是沒有SIM卡,那又該怎麼用手機聯絡呢? Victor:「話說,這邊最強的電信應該就是Telstra了!」 Telstra,是澳洲最大的電訊公司同時它也是覆蓋率最廣的一間電訊公司。
Thumbnail
話說有了帳戶,日後賺得錢就有地方放了;有了「Go card」,在昆士蘭就可以暢行無阻。 但要是沒有SIM卡,那又該怎麼用手機聯絡呢? Victor:「話說,這邊最強的電信應該就是Telstra了!」 Telstra,是澳洲最大的電訊公司同時它也是覆蓋率最廣的一間電訊公司。
Thumbnail
Gloria:「你們先去住我們之前住過的那間share house吧!然後我們已經有找到農場的工作,後天就可以一起上工了!」 只能說Gloria根本是我們這組人馬的「真・leader」!是說到底有誰能在沒做功課的情況下,一來澳洲三天就有工作可以做呢?
Thumbnail
Gloria:「你們先去住我們之前住過的那間share house吧!然後我們已經有找到農場的工作,後天就可以一起上工了!」 只能說Gloria根本是我們這組人馬的「真・leader」!是說到底有誰能在沒做功課的情況下,一來澳洲三天就有工作可以做呢?
Thumbnail
曲博有先回顧前面系列他談到區塊鏈可以等同存摺鏈,也就是一種資料結構,只是為了安全性,我們把它搞得又臭又長,眾人來維護且沒有人可以佔比達51%以上,那麼,這樣的去中心化、不可竄改的方式,我們可以信任吧
Thumbnail
曲博有先回顧前面系列他談到區塊鏈可以等同存摺鏈,也就是一種資料結構,只是為了安全性,我們把它搞得又臭又長,眾人來維護且沒有人可以佔比達51%以上,那麼,這樣的去中心化、不可竄改的方式,我們可以信任吧
Thumbnail
啊壽一直都想開一個股票戶口,因為上一次在 IB 抽農夫山泉水時候,竟然有$100認購費,但上一次為了方便都隨便,但發覺這個對之後交易都非常重要, 因此啊壽在膽粗粗的與華盛證券傾合作,幸好對方接納,起碼認購費只是$50,孖展認購$100,暗盤交易免佣金。 這次優惠可以說是特別為《啊壽的投資星球》
Thumbnail
啊壽一直都想開一個股票戶口,因為上一次在 IB 抽農夫山泉水時候,竟然有$100認購費,但上一次為了方便都隨便,但發覺這個對之後交易都非常重要, 因此啊壽在膽粗粗的與華盛證券傾合作,幸好對方接納,起碼認購費只是$50,孖展認購$100,暗盤交易免佣金。 這次優惠可以說是特別為《啊壽的投資星球》
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News