Pythonでsuper()を使う場面

Pythonでsuper()を使うべき状況を説明するストーリーを紹介します。ストーリーの設定は、ゲーム開発におけるキャラクターの継承を通じてsuper()の使用方法を見ていきましょう。

ストーリー: ゲーム開発の冒険

あなたはゲーム開発チームの一員で、異なる種類のキャラクターを持つ冒険ゲームを作成しています。ゲームにはCharacterという基本クラスがあり、このクラスからWarriorやMageなどのキャラクタークラスを継承して特化させています。

基本クラス: Character

まず、すべてのキャラクターが共通して持つ属性とメソッドを定義する基本クラスCharacterを作成します。

class Character:
   def __init__(self, name, level):
       self.name = name
       self.level = level

   def introduce(self):
       print(f"My name is {self.name} and I am a level {self.level} character.")

このクラスは、キャラクターの名前(name)とレベル(level)を保持し、自己紹介をするintroduceメソッドを持っています。

派生クラス: Warrior

次に、Characterクラスを継承して、戦士(Warrior)クラスを定義します。戦士クラスは特別なスキル「スマッシュ」を持っており、このスキルを使用するメソッドを追加します。


class Warrior(Character):
   def __init__(self, name, level, weapon):
       super().__init__(name, level)  # super()を使用して基本クラスのコンストラクタを呼び出します。
       self.weapon = weapon

   def smash(self):
       print(f"{self.name} smashes the enemy with their {self.weapon}!")

ここでsuper()が登場します。Warriorクラスのコンストラクタでは、super().__init__(name, level)を使って、基本クラスCharacterのコンストラクタを呼び出しています。これにより、nameとlevelの初期化をCharacterに任せることができます。さらに、Warrior独自の属性であるweaponを初期化します。

使用例

最後に、これらのクラスを使用してキャラクターを作成し、そのメソッドを呼び出します。


# キャラクターの作成
hero = Warrior("Arthur", 5, "Sword")

# 自己紹介とスキルの使用
hero.introduce()
hero.smash()


このシンプルなストーリーを通じて、super()を使用するべきシチュエーションを見てきました。具体的には、派生クラスから基本クラスのメソッド(ここではコンストラクタ)を呼び出す必要がある場合にsuper()が非常に便利です。これにより、コードの重複を避け、保守性を高めることができます。

この記事が気に入ったらサポートをしてみませんか?