【Python】オブジェクト指向プログラミング vol.4 ~コンストラクタ~
コンストラクタ
__init__
は、「インスタンスが作成されるタイミングで呼びだされる特殊なメソッド」です。
一般的にそのような処理をするメソッドは「コンストラクタ」と呼ばれています。コンストラクトは「構築する」という意味です。試しに__init__
内にprint文を加えてインスタンスを作成し、コンストラクタの挙動を見てみます。
class Player: def __init__(self): print('Diagonal-M') self.name = name self.team = team self.position = position self.attack = attack self.special = special self.heart = heart self.technique = technique self.defense = defense c = Player()
このプログラムを実行すると、インスタンスを作成した際に__init__
内にあるprint文が呼び出されます。以下が実行結果です
Diagonal-M
このコンストラクタにも通常のメソッドと同じようにコンストラクタも引数を複数与えることができます。このコンストラクタの引数はクラスをインスタンス化する際に利用されます。実際にコンストラクタの引数の利用例を上記コードを改良して__init__
に引数を与えてみます。
class Player: def __init__(self, name, team, position, attack, special, heart, technique, defense): print('Diagonal-M') self.name = name self.team = team self.position = position self.attack = attack self.special = special self.heart = heart self.technique = technique self.defense = defense c = Player('クリステファン・ローディ', 'R・マドリード', 'FW', 409, 391, 310, 395, 193) print('選手名:{}'.format(c.name)) print('所属チーム:{}'.format(c.team)) print('守備力:{}'.format(c.defense))
このコードを実行すると以下のようになります。
Diagonal-M
選手名:クリステファン・ローディ
所属チーム:R・マドリード
守備力:193
コンストラクタで定義した引数に対応した形で、インスタンス化が行われていることがわかります。具体的にはdef __init__(self, name, team, position, attack, special, heart, technique, defense)
とPlayer('クリステファン・ローディ', 'R・マドリード', 'FW', 409, 391, 310, 395, 193)
が対応しているかたちになっています。
そしてコンストラクタ内では、与えられた引数をインスタンスのデータの初期化に利用しています。コンストラクタの引数を使うと「インスタンスの初期化を実施する」という保証を与えることができます。
次回はクラスに関数の追加する方法をまとめます。