Python入門:継承
継承とは
クラスを継承すると、あるクラスのメソッドやフィールドを別のクラスで利用することができます。
クラスの処理
クラス名の後ろの()に継承するクラスを書きます。
class Super :
name = "Super"
def greeting(self) :
print(f"My name is {self.name}")
#Superクラスを継承
class Sub(Super) :
pass
sub = Sub()
print(sub.name)
sub.greeting()
Super
My name is Super
このとき、継承されるクラスを親クラス、継承するクラスを子クラスといいます。
継承したクラスの上書き
子クラスの中では、親クラスのメソッドやフィールドをを上書きすることができます。
class Super :
name = "Super"
def greeting(self) :
print(f"My name is {self.name}")
#Superクラスを継承
class Sub(Super) :
#nameフィールドを上書き
name = "sub"
#greetingメソッドを上書き(オーバーライド)
def greeting(self) :
print(f"My new name is {self.name}")
super = Super()
print(super.name)
super.greeting()
sub = Sub()
print(sub.name)
sub.greeting()
Super
My name is Super
sub
My new name is sub
また、子クラスの中で親クラスのメソッドを上書きすることをオーバーライドといいます。
継承の利用
継承を使うと、オブジェクト指向の幅を広げることができます。
次のコードを見てください
#敵モブの親クラスモンスター
class Monster :
#すべてのモンスターが持つ属性として名前とhpを定義
name = ""
hp = 0
def __init__(self,name):
self.name = name #コンストラクタ時に名前の設定
#すべてのモンスターが持つ能力、攻撃
def attack(self) :
print(f"{self.name}から攻撃を受けた")
#モンスタークラスの派生モブ、ゴブリンのクラス
class Goblin(Monster) :
def __init__(self,name):
self.name = name #コンストラクタ時に名前の設定
self.hp = 50 #ゴブリンのhpは50
#モンスタークラスの派生モブ、ウィザードのクラス
class Wizard(Monster) :
def __init__(self,name):
self.name = name #コンストラクタ時に名前の設定
self.hp = 150 #ウィザードのhpは150
#ウィザード固有の能力、魔法攻撃
def Mazic(self):
print(f"{self.name}から魔法攻撃を受けた")
#モンスタークラスの派生モブ、ゴーレムのクラス
class Golem(Monster):
def __init__(self,name):
self.name = name #コンストラクタ時に名前の設定
self.hp = 500 #ゴーレムのhpは500
#ゴーレムが持つ固有の能力、防御
def protect(self):
print(f"{self.name}の攻撃が7割軽減された")
上のコードには、モンスタークラスと継承によってモンスタークラスから派生したゴブリンクラスとウィザードクラス、ゴーレムクラスがあります。
継承を使うことによって、すべてのモンスターのが持つ機能はモンスタークラス、各モンスターが持つ固有機能は各モンスターのクラスに書かれています。
最後に
この記事では、Pythonでのクラスの継承について解説しました。
もっとPythonを学びたい!という方はこちらの記事でPythonの基本的な構文を学習することが出来ますのでぜひ立ち寄ってみてください!