プログラ生活

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

【Python連載】クラス (コンストラクタ)-022-

www.pon-x.jp

今回は前回までの続き、クラスの続きです。

コンストラクタ

前回はメソッドについて触れてきました。今回は、コンストラクタを説明します。
コンストラクタは端的に言うと、クラスをインスタンス化したときに同時に実行されるメソッドで、最初に実行されるため「初期化メソッド」とも呼ばれています。

コンストラクタ

さっそくやってみます。

class Test:
    def __init__ (self, name):
        self.name = name
        
    def print(self):
        print(self.name)
    
human = Test("田中")
human.print()

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

コンストラクタはメソッドの名前を「init」とします。
こうすると、Test("田中")でインスタンス化したときに自動的にinitの中身が実行されており、self.name = nameに「田中」が入ります。
その後、printメソッドで表示をしているというわけです。

前回までのストーリー仕立てでやってみる。

class Character:
    def __init__ (self, job, HP):# コンストラクタを定義して、初期値を決める。
        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("レベル : " + str(self.level))
        print("※ " + self.comment)


yusya = Character("勇者" , 100) # インスタンス作成時にコンストラクタで初期化される。

kenja = Character("賢者" , 70) # インスタンス作成時にコンストラクタで初期化される。


#誕生したキャラクターを確認しましょう。
print("-------------")

yusya.print_status()

print("-------------")

kenja.print_status()

print("-------------")

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

このあとレベルを上げるために、インスタンスはそのままにメソッドだけ更新する。

# set_statusでアトリビュートを更新してみましょう。
# 実行を繰り返してみるとレベルとHPがどんどん上がる。

yusya.set_status(20) # HPを20上げる
kenja.set_status(10) # HPを10上げる

# 表示するするメソッドを使ってみよう。

print("-------------")

yusya.print_status()

print("-------------")

kenja.print_status()

print("-------------")

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

いかがでしょうか。
クラスを使うと、処理が効率的になることが実感いただけだのではないでしょうか!?
次回もクラスの続きを書く予定です。