今回は前回までの続き、クラスの続きです。
クラスの継承
今回は、クラスを別のクラスで用いる継承を紹介します。
まずは、前回までのストーリーにもとづいて以下のクラスを作ってみましょう。
class Character: def __init__ (self, job, HP, weapon):# コンストラクタを定義して、初期値を決める。 self.job = job self.HP = HP self.level = 1 self.comment = self.job + "が誕生した" def set_status(self, set_HP): # レベルとHPを上げるメソッドに変更 self.level += 1 # レベルを1ずつ上げる(1ずつと分かっているので引数はいらない) self.HP += set_HP # さっきまでは直接代入したが、増加分に変更する self.comment = self.job + "はレベルが上がった" def print_status(self): #表示するためのメソッド print("職業 : " + self.job) print("H P : " + str(self.HP)) print("武器 : " + self.weapon) print("レベル : " + str(self.level)) print("※ " + self.comment)
上記は、キャラクターを誕生させ、レベルアップさせるメソッドがあることがわかります。
継承
次に、Characterメソッドを活用して別のクラスを作ります。
class Child(Character): def __init__(self, job, HP, weapon, comment): super().__init__(job, HP,weapon) self.weapon = weapon self.comment = comment def powerUp(self): self.HP += 100 self.comment = "孫勇者のレベルが上がった"
Childクラスは、Characterクラスを継承しています。
これは、Characterクラスを用いてChildクラスを作っていると思ってください。
ひとつずつ説明します。
def __init__(self, job, HP, weapon, comment):
Childクラスのコンストラクタです。
super().__init__(job, HP,weapon)
superは親クラス、つまりCharacterクラスのことです。
つまり、今回はCharacterクラスのコンストラクタに対して、引数を渡しているということすね。
self.weapon = weapon self.comment = comment
アトリビュートに引数の値を代入します。
def powerUp(self): self.HP += 100 self.comment = "孫勇者のレベルが上がった"
レベルアップメソッドを設定します。
インスタンス化してみる。
print("-------------------------") child_yusya = Child("勇者" , 100 , "はがねの剣" , "孫勇者がうまれた") child_yusya.print_status() print("-------------------------") for i in range(5): print("-------------------------") child_yusya.powerUp() child_yusya.print_status() print("-------------------------")
全ソースはこちら
class Character: def __init__ (self, job, HP, weapon):# コンストラクタを定義して、初期値を決める。 self.job = job self.HP = HP self.level = 1 self.comment = self.job + "が誕生した" def set_status(self, set_HP): # レベルとHPを上げるメソッドに変更 self.level += 1 # レベルを1ずつ上げる(1ずつと分かっているので引数はいらない) self.HP += set_HP # さっきまでは直接代入したが、増加分に変更する self.comment = self.job + "はレベルが上がった" def print_status(self): #表示するためのメソッド print("職業 : " + self.job) print("H P : " + str(self.HP)) print("武器 : " + self.weapon) print("レベル : " + str(self.level)) print("※ " + self.comment) class Child(Character): def __init__(self, job, HP, weapon, comment): super().__init__(job, HP,weapon) self.weapon = weapon self.comment = comment def powerUp(self): self.HP += 100 self.comment = "孫勇者のレベルが上がった" print("-------------------------") child_yusya = Child("勇者" , 100 , "はがねの剣" , "孫勇者がうまれた") child_yusya.print_status() print("-------------------------") for i in range(5): print("-------------------------") child_yusya.powerUp() child_yusya.print_status() print("-------------------------")