← 課程總覽

🏗️ 第6堂課:物件導向程式設計

程式學習第六堂課:Python class 類別、__init__ 建構子、self、繼承、封裝、多型、寵物管理系統專案
含語音講解(約 60 分鐘),附互動小測驗

📖 第一階段:類別與物件(約 25 分鐘)

1. 為什麼需要物件導向?

⏱ 10 分鐘

OOP 把「資料 + 功能」打包成類別(class)

class Student:
    def __init__(self, name):
        self.name = name
        self.scores = []
    
    def add_score(self, score):
        self.scores.append(score)
    
    def average(self):
        return sum(self.scores) / len(self.scores) if self.scores else 0

s1 = Student("丁丁")
s1.add_score(85); s1.add_score(92)
print(f"{s1.name} 平均:{s1.average()}")

2. __init__ 與 self

⏱ 15 分鐘
class Dog:
    species = "犬科"  # 類別屬性
    
    def __init__(self, name, age):
        self.name = name  # 實例屬性
        self.age = age
        self.tricks = []
    
    def bark(self):
        print(f"{self.name}:汪汪!")
    
    def learn_trick(self, trick):
        self.tricks.append(trick)

dog1 = Dog("小白", 3); dog2 = Dog("小黑", 1)
dog1.bark(); dog1.learn_trick("坐下")
🧠 self 代表「這個物件自己」。

📖 第二階段:繼承與封裝(約 20 分鐘)

3. 繼承與多型

⏱ 15 分鐘
class Animal:
    def __init__(self, name): self.name = name
    def speak(self): pass

class Cat(Animal):
    def speak(self): return f"{self.name}:喵~"

class Dog(Animal):
    def speak(self): return f"{self.name}:汪汪!"

animals = [Cat("小花"), Dog("小白")]
for a in animals: print(a.speak())  # 多型!

4. 封裝:保護內部資料

⏱ 10 分鐘
class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance  # 雙底線 = 私有
    
    def deposit(self, amount):
        if amount > 0: self.__balance += amount
    
    def get_balance(self):
        return self.__balance

acc = BankAccount("丁丁", 1000)
acc.deposit(500)
print(acc.get_balance())  # 1500

📖 第三階段:實戰(約 15 分鐘)

5. 專案:寵物管理系統

⏱ 10 分鐘
class Pet:
    def __init__(self, name, pet_type, age):
        self.name = name; self.type = pet_type
        self.age = age
        self.hunger = 50; self.happiness = 50
    
    def feed(self):
        self.hunger = max(0, self.hunger - 20)
        self.happiness += 5
        print(f"🍖 {self.name} 吃飽了!")
    
    def play(self):
        self.happiness = min(100, self.happiness + 15)
        self.hunger += 10
        print(f"⚽ {self.name} 玩得很開心!")
    
    def status(self):
        print(f"{self.type} {self.name}({self.age}歲)")
        print(f"  飢餓:{self.hunger}  快樂:{self.happiness}")

pets = [Pet("小白", "🐶 狗", 3), Pet("小花", "🐱 貓", 2)]
pets[0].play(); pets[0].feed(); pets[0].status()

🧪 小測驗:你學會了嗎?

5 題選擇題,選完按「交卷」看成績
第 1 / 5 題
__init__ 方法什麼時候被呼叫?
第 2 / 5 題
self 在 class 中代表什麼?
第 3 / 5 題
class Cat(Animal) 中 Cat 獲得什麼?
第 4 / 5 題
雙底線 __balance 的作用?
第 5 / 5 題
多型的核心概念?
你的得分
0/5

🎯 第6堂課,你學會了什麼?

class 類別__init__繼承封裝多型寵物管理系統

從現在起,你不再只寫「腳本」,而是在設計系統

→ 前往第7堂課