親クラスで定義されているメソッドを子クラスで再定義することができます。これをオーバーライドと呼びます。オーバーライドとは英語で覆すという意味です。メソッドをオーバーライドするには親クラスでメソッドを定義する時と同じ書き方で子クラスにメソッドを記述します。
class 子クラス名(親クラス名): def 親クラスで定義されているメソッド名(self): 処理
では実際に先ほどのMonsterクラスで定義されているattackメソッドをBoss_Monsterクラスでオーバーライドしてみましょう。
Monsterクラスではad変数の値をそのままダメージとして表示していましたが、Boss_Monsterクラスではad変数の2倍のダメージを与えることにしましょう。
class Monster: def __init__(self, name, ad): self.name = name self.ad = ad def attack(self): print(self.name + "は" + str(self.ad) + "のダメージを与えた") class Boss_Monster(Monster): def attack(self): # attackメソッドをオーバーライド print(self.name + "は" + str(self.ad * 2) + "のダメージを与えた") def aura(self): print(self.name + "は禍々しいオーラを放っている") shalltear = Boss_Monster("シャルティア", 500) shalltear.aura() shalltear.attack()
実行結果は次のようになります。
シャルティアは禍々しいオーラを放っている シャルティアは1000のダメージを与えた
シャルティアの攻撃力は500のままなので、ad変数の値をそのままダメージとして表示するMonsterクラスのatacckメソッドではなく、ad変数の2倍の値をダメージとするBoss_Monsterクラスのattackメソッドが呼び出されているのがわかります。
このように親クラスと同じ名前のメソッドを子クラスで再定義するとメソッドをオーバーライドできます。