Site icon imageTomoMemo.dev

Memo on programming. Provided by Tomo with passion.

Pythonを使ってOOPを学ぶ「継承とポリモーフィズム」

Icon in a callout block
Python 100Days Challenge Day15

Pythonを通して、継承とポリモーフィズムについて学ぶ。

継承

継承とはクラスの機能を別クラス(子クラス・サブクラス)が引き継ぐこと。

既存クラスのコードを再利用して、新しいクラスを作成するときの手間を減らせる。

# 継承の基本構文
class 親クラス:
    # 親クラスのメソッド
    def 親クラス-メソッド(self):
        print("親クラスのメソッド")
        
class 子クラス(親クラス):
    # 子クラスのメソッド
    def 子クラス-メソッド(self):
        print("子クラスのメソッド")
 
# 子クラスのインスタンスを作成
子のインスタンス = 子クラス()
子のインスタンス.親クラス-メソッド() # 親クラスのメソッドが使える
子のインスタンス.子クラス-メソッド() # 子クラスのメソッドが使える

ポリモーフィズム

異なるクラスのオブジェクトが同じメソッドを持っている場合に、それを同じ方法で呼び出せることを指す。つまり、クラスに関係なく一貫したメソッドを提供できる。

継承とポリモーフィズムを使ってみる

# 親クラス
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
    
    def work(self):
        print(f"{self.name} is working.")
        
# 子クラス
class Manager(Employee):
    def work(self):
        print(f"{self.name} is managing the team.")

class Developer(Employee):
    def work(self):
        print(f"{self.name} is writing code.")
        
# ポリモーフィズムを使った関数
def employee_work(employee):
    employee.work()
  
# オブジェクトの作成
manager = Manager("Alan", 90000)
developer = Developer("Bob", 90000)
    
# メソッドを呼び出す
employee_work(manager)
employee_work(developer)

>
Alan is managing the team.
Bob is writing code.

ポリモーフィズムについてもう少し解説。これは「多様な形態をもつ」という意味。

OOPでは、同じメソッド名を持つ異なるオブジェクトを、同じように扱える、という概念。

# ポリモーフィズムを使った関数
def employee_work(employee):
    employee.work()

では、なぜこう書けるのか?

  • 継承
    • managerDeveloperクラスではEmployeeクラスを継承しているのでworkメソッドを持っている
  • メソッドのオーバーライド
    • ManagerDeveloperクラスはworkメソッドを独自に定義してる(これがオーバーライド)
  • ポリモーフィズム
    • employee_work関数は、具体的なクラスに依存せず、employeeオブジェクトに対してworkメソッドを呼び出せる。これにより、異なるクラスのインスタンスでも同じ関数を使って操作できる

Powered by Tomo with passion.