プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【Python連載】クラス (継承)-023-

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): # レベルと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("-------------------------")

f:id:hanabusa-snow:20211201085622p:plain

全ソースはこちら

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("-------------------------")