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()
では、なぜこう書けるのか?
- 継承
manager
やDeveloper
クラスではEmployeeクラスを継承しているのでworkメソッドを持っている
- メソッドのオーバーライド
Manager
やDeveloper
クラスはwork
メソッドを独自に定義してる(これがオーバーライド)
- ポリモーフィズム
employee_work
関数は、具体的なクラスに依存せず、employee
オブジェクトに対してwork
メソッドを呼び出せる。これにより、異なるクラスのインスタンスでも同じ関数を使って操作できる