Diagonal M

データサイエンス系長期インターンで学んだことなど

【Python】オブジェクト指向プログラミング vol.4 ~コンストラクタ~

Pythonオブジェクト指向の勉強の続きです。

コンストラク

__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)が対応しているかたちになっています。

そしてコンストラクタ内では、与えられた引数をインスタンスのデータの初期化に利用しています。コンストラクタの引数を使うと「インスタンスの初期化を実施する」という保証を与えることができます。

次回はクラスに関数の追加する方法をまとめます。