クラスの継承

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によるオブジェクト指向プログラミング入門

子クラスは親のデータをすべて持つ

# BankAccount から継承したコンストラクタ
savings_acct = SavingsAccount(1000)
type(savings_acct)
__main__.SavingsAccount
# BankAccount から継承した属性
savings_acct.balance
1000
# 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...