メソッドのオーバーライドについて学んだところで、今度は「super()
」という特別な関数についてお話しするね。
super()
は、子クラスでメソッドをオーバーライドするときに、親クラスの同じメソッドを呼び出したいときに使うんだ。これを使うと、親クラスの機能も生かしつつ、子クラスで新しい機能を追加できるから、とっても便利なんだよ。
例えば、ゲームのキャラクターで考えてみよう。基本的なキャラクターは「挨拶」する機能を持っているけど、特別なキャラクターは挨拶に加えて「特別なメッセージ」も言いたい、なんてときに使えるよ。
# 親クラス:BaseCharacter(基本的なキャラクター)
class BaseCharacter:
def __init__(self, name):
self.name = name
def greet(self):
print(f"こんにちは!私は{self.name}です。")
# 子クラス:HeroCharacter(勇者のキャラクター)
class HeroCharacter(BaseCharacter):
def __init__(self, name, weapon):
# super()を使って親クラスの__init__を呼び出すよ!
super().__init__(name)
self.weapon = weapon
# greetメソッドをオーバーライドするけど、親のgreetも使いたいな
def greet(self):
super().greet() # 親クラスのgreetメソッドを呼び出す!
print(f"そして、私の武器は{self.weapon}です!")
hero = HeroCharacter("アキラ", "聖剣")
hero.greet()
# 出力:
# こんにちは!私はアキラです。
# そして、私の武器は聖剣です!
super().__init__(name)
と書くことで、HeroCharacterが作られるときに、BaseCharacterの__init__
メソッドも動いて、キャラクターの名前がちゃんと設定されるんだ。
そして、super().greet()
と書くことで、HeroCharacterのgreet
メソッドの中で、BaseCharacterのgreet
メソッドが呼び出され、その後にHeroCharacter独自のメッセージが追加されているのが分かるかな?
super()
を使うと、親クラスと子クラスの機能をうまく組み合わせて、より柔軟なプログラムを作ることができるようになるよ!