今回は前回までの続き、クラスの続きです。
コンストラクタ
前回はメソッドについて触れてきました。今回は、コンストラクタを説明します。
コンストラクタは端的に言うと、クラスをインスタンス化したときに同時に実行されるメソッドで、最初に実行されるため「初期化メソッド」とも呼ばれています。
コンストラクタ
さっそくやってみます。
class Test: def __init__ (self, name): self.name = name def print(self): print(self.name) human = Test("田中") human.print()
コンストラクタはメソッドの名前を「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("-------------")
このあとレベルを上げるために、インスタンスはそのままにメソッドだけ更新する。
# set_statusでアトリビュートを更新してみましょう。 # 実行を繰り返してみるとレベルとHPがどんどん上がる。 yusya.set_status(20) # HPを20上げる kenja.set_status(10) # HPを10上げる # 表示するするメソッドを使ってみよう。 print("-------------") yusya.print_status() print("-------------") kenja.print_status() print("-------------")
いかがでしょうか。
クラスを使うと、処理が効率的になることが実感いただけだのではないでしょうか!?
次回もクラスの続きを書く予定です。