オブジェクト指向のプログラミング言語ではクラスの属性を引き継いだ新しいクラスを作ることができます。この継承元となるクラスのことを親クラスやスーパークラス、継承先のクラスのことを子クラスやサブクラスと呼びます。
例えば次の図のようにname変数とad変数、attackメソッドを持つMonsterクラスの特性を引き継いだBoss_Monsterクラスは、Monsterクラスの属性を持ちながら、一部の属性を追加したり上書きしたりといった変更を加えた新しいクラスとして作成することができます。
クラスを継承するには次のように、クラス名の後に丸括弧を追加して親クラスを引数として指定します。
それから子クラスに追加する処理を記述します。
class 子クラス名(親クラス名): 追加する処理
では実際にこのクラスの継承をコードで書いてみましょう。
まずは継承元であるMonsterクラスを作成します。
class Monster: def __init__(self, name, ad): self.name = name self.ad = ad def attack(self): print(self.name + "は" + str(self.ad) + "のダメージを与えた")
このMonsterクラスはname変数とad変数、attackメソッドを持っています。
コードを追記してこのクラスを継承したBoss_Monsterクラスを作成してみましょう。
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 aura(self): # auraメソッドを追加 print(self.name + "は禍々しいオーラを放っている") shalltear = Boss_Monster("シャルティア", 500) shalltear.aura() shalltear.attack()
Boss_MonsterクラスはMonsterクラスを継承した子クラスなので、自身が定義しているauraメソッドの他に親クラスのコンストラクタとattackメソッドを呼び出すことができます。
実際にコードを実行してみましょう。
シャルティアは禍々しいオーラを放っている シャルティアは500のダメージを与えた
正常に実行されました。
このように子クラスは定義していないメソッドが呼び出された場合、自動的に親クラスのメソッドが呼び出されます。
クラスの継承を使うと、似ているけれどちょっと違うクラスを作りたい時に、その差分だけを記述することで新しいクラスとして定義することができます。