讓我們用最生活化的方式,結合Python代碼,來理解面向對象編程的四大特性。
1. 封裝:像使用自動售貨機
生活比喻:
-
你只需要投幣、按按鈕,就能拿到飲料
-
不需要知道機器內部如何計算找零、如何運送飲料
-
如果直接打開機器改數據(比如直接拿錢),會出大問題
Python代碼:
class VendingMachine:def __init__(self):self.__money = 0 # 私有變量,雙下劃線def insert_coin(self, amount):if amount > 0:self.__money += amountdef get_drink(self, button):if self.__money >= 5: # 假設飲料5元self.__money -= 5return f"取出{button}號飲料"return "余額不足"# 使用
machine = VendingMachine()
machine.insert_coin(10)
print(machine.get_drink(3)) # 正確用法
# print(machine.__money) # 報錯!不能直接訪問私有變量
通俗理解:封裝就是把東西"裝起來",只給你幾個按鈕用,保護內部數據安全。
2. 繼承:像生物遺傳
生活比喻:
-
父母會遺傳給孩子眼睛顏色、身高等特征
-
孩子繼承了父母的特征,還可以有自己的特長
-
"龍生龍,鳳生鳳,老鼠的兒子會打洞"
Python代碼:
class Animal:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name}在吃東西")class Cat(Animal): # 繼承Animal類def meow(self): # 子類特有方法print("喵喵叫")# 使用
kitty = Cat("小花")
kitty.eat() # 繼承的方法
kitty.meow() # 自己的方法
通俗理解:繼承就是"孩子隨爸媽",自動獲得父母的能力,還能發展自己的特色。
3. 多態:像USB接口
生活比喻:
-
電腦的USB接口可以插鼠標、鍵盤、U盤
-
雖然設備不同,但插法都一樣
-
電腦用同樣的方式與它們交互
Python代碼:
class Device:def plug_in(self):passclass Mouse(Device):def plug_in(self):print("鼠標已連接,可以移動光標")class Keyboard(Device):def plug_in(self):print("鍵盤已連接,可以輸入文字")# 使用
devices = [Mouse(), Keyboard()]
for device in devices:device.plug_in() # 同一個方法,不同表現
通俗理解:多態就是"一個接口,多種形態",像插座能插各種電器。
4. 抽象:像餐廳點餐
生活比喻:
-
你只需要看菜單點菜,不需要知道怎么做菜
-
不同廚師對同一道菜可能有不同做法
-
只要最終端上來的菜符合菜單描述就行
Python代碼:
from abc import ABC, abstractmethodclass Dish(ABC): # 抽象類@abstractmethoddef prepare(self): # 抽象方法passclass FriedRice(Dish):def prepare(self):print("大火爆炒米飯10分鐘")class Soup(Dish):def prepare(self):print("小火慢燉30分鐘")# 使用
dishes = [FriedRice(), Soup()]
for dish in dishes:dish.prepare() # 知道要做菜,但不關心具體怎么做
通俗理解:抽象就是"知道要做什么,不關心怎么做",像點餐不關心廚房里的事。
四大特性總結表
特性 | 生活比喻 | Python特點 | 代碼關鍵詞 |
---|---|---|---|
封裝 | 自動售貨機 | 用__ 隱藏內部數據 | self.__var |
繼承 | 生物遺傳 | 子類獲得父類能力 | class Child(Parent): |
多態 | USB接口 | 同一方法不同表現 | 方法重寫 |
抽象 | 餐廳菜單 | 用ABC 定義規范 | @abstractmethod |
記住這些生活例子,下次寫Python類時,想想自動售貨機、遺傳特征、USB設備和餐廳菜單,就能自然應用這四大特性了!
?
?
?
?
?
?
?
?