類別繼承

Python 物件導向程式設計入門

George Boorman

Curriculum Manager, DataCamp

程式碼重用

 

1. 有人已經做好了

 

  • 套件適合固定功能
  • OOP 適合客製功能

多個 Python 套件的標誌

Python 物件導向程式設計入門

程式碼重用

 

1. 有人已經做好了

 

2. DRY:Don't Repeat Yourself(避免重複)

各種 GUI 元件

Python 物件導向程式設計入門

程式碼重用

 

1. 有人已經做好了

 

2. DRY:Don't Repeat Yourself(避免重複)

請勿重做各種 GUI 元件

Python 物件導向程式設計入門

繼承

 

$$\Large{\text{新類別功能 = 舊類別功能 + 額外功能}}$$

Python 物件導向程式設計入門

階層範例

BankAccount 類別

Python 物件導向程式設計入門

階層範例

SavingsAccount 繼承自 BankAccount

Python 物件導向程式設計入門

階層範例

CheckingAccount 也繼承自 BankAccount

Python 物件導向程式設計入門

階層範例

CheckingAccount 擁有修改過的 withdraw 方法

Python 物件導向程式設計入門

實作類別繼承

class BankAccount:
    def __init__(self, balance):
       self.balance = balance

    def withdraw(self, amount):
        self.balance -= amount


# Class inheriting from BankAccount class SavingsAccount(BankAccount): pass
  • BankAccount:被延伸/繼承功能的父類別
  • SavingsAccount:會繼承並擴充功能的子類別/子類
Python 物件導向程式設計入門

子類別擁有父類別的所有資料

# Constructor inherited from BankAccount
savings_acct = SavingsAccount(1000)
type(savings_acct)
__main__.SavingsAccount
# Attribute inherited from BankAccount
savings_acct.balance
1000
# Method inherited from BankAccount
savings_acct.withdraw(300)
Python 物件導向程式設計入門

繼承:「is-a」關係

SavingsAccount 是一個 BankAccount

(可能帶有特殊功能)

savings_acct = SavingsAccount(1000)
isinstance(savings_acct, SavingsAccount)
True
isinstance(savings_acct, BankAccount)
True

 

 

acct = BankAccount(500)
isinstance(acct, SavingsAccount)
False
isinstance(acct, BankAccount)
True
Python 物件導向程式設計入門

一起來練習吧!

Python 物件導向程式設計入門

Preparing Video For Download...