www.pon-x.jp
今回は前回までの続き、クラスの続きです。
オーバーライド
今回は、親クラスの一部を上書きするオーバーライドを紹介します。
まずは、前回までのストーリーにもとづいて以下のクラスを作ってみましょう。
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):
self.level += 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)
def powerUp(self):
self.HP += 50
self.comment = "勇者のレベルが上がった"
そして、前回同様にCharacterクラスを継承するChildクラスを作成します。
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 = "孫勇者のレベルが上がった"
2つのクラスを比較するとお互いpowerUpメソッドが存在していることがわかります。
Characterクラスは通常通りpowerUpメソッドが使用できますが、ChildメソッドはCharacterクラスを継承していますが、powerUpメソッドを実行するとChildクラス内のpowerUpメソッドがCharacterクラスのpowerUpメソッドを上書きして実行されます。
これがオーバーライドです。
以下を実行してみましょう。
print("-------------------------")
yusya = Child("勇者" , 50 , "ほっそい棒" , "勇者がうまれた")
yusya.print_status()
print(">>>>>>>>>>>>>>>>>>>>>>>>>")
child_yusya = Child("孫勇者" , 100 , "はがねの剣" , "孫勇者がうまれた")
child_yusya.print_status()
print("-------------------------")
print("-------------------------")
yusya.powerUp()
yusya.print_status()
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):
self.level += 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)
def powerUp(self):
self.HP += 50
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("-------------------------")
yusya = Child("勇者" , 50 , "ほっそい棒" , "勇者がうまれた")
yusya.print_status()
print(">>>>>>>>>>>>>>>>>>>>>>>>>")
child_yusya = Child("孫勇者" , 100 , "はがねの剣" , "孫勇者がうまれた")
child_yusya.print_status()
print("-------------------------")
print("-------------------------")
yusya.powerUp()
yusya.print_status()
print(">>>>>>>>>>>>>>>>>>>>>>>>>")
child_yusya.powerUp()
child_yusya.print_status()
print("-------------------------")