【Python】コンストラクタの使い方 __init__を利用





 

コンストラクタとは

クラスからインスタンスを生成した際に、自動的に呼び出されるメソッドのこと

インスタンス生成時に、必ず最初に呼び出されるので
変数の初期値を設定したり、何らかの初期化などで使われることが多いです。

 

コンストラクタって、結局何ぞや?

__init__ という記述があれば、それはコンストラクタです。

 

よく分からなければ

init が出てきたら、最初に呼び出される関数で
コンストラクタと呼ばれるものと思っておけば問題ないです。

コンストラクタの記述ルール

def __init__ ではじめます。

 

◆引数がない場合
def __init__(self):
◇引数がある場合
def __init__(self, hoge):

 

引数が2つ以上ある場合は

def __init__(self, hoge, fuga):

と続けて書きます。

 

コンストラクタの使い方

まずは、引数なしの簡単な形で実行してみましょう!

引数なしの場合

class Test:
    def __init__(self):
        print('インスタンスの生成時に実行されます')


obj = Test()  # インスタンス生成

 

実行結果:

インスタンスの生成時に実行されます

 

6行目で、Testクラスのインスタンスを生成した時に

def __init__(self)

の中が実行されています。

 

引数ありの場合

class Test:
    def __init__(self, name):
        print('インスタンスの生成時に実行されます')
        self.name = name

    def printMyname(self):
        print("self.name :" + self.name)


obj = Test("alex")  # インスタンス生成
obj.printMyname()

 

実行結果:

インスタンスの生成時に実行されます
self.name :alex

 

selfというのは自身のインスタンスを指すもので

self.name = name

とするとインスタンス変数に、引数がセットされます。

 

新米太郎
新米太郎

最初は難しいので、なんとなく理解しておけばOKです!

 

コンストラクタの引数に初期値を設定する

先程の例で、引数のnameが
ある場合とない場合はどのようにすればよいでしょうか?

もし、このように引数に応じて実行できたら便利ですよね?

class Test:
    def __init__(self):
        print('インスタンスの生成時に実行されます')

    def __init__(self, name):
        print('インスタンスの生成時に実行されます')
        self.name = name

 

残念ながら、エラーとなってしまいます、、、

ただし、コンストラクタの引数に初期値が設定できるため似たような動作は可能です。

実はjavaなどの他言語では、このような記述でもエラーにならないのですが
pythonではコンストラクタを複数定義することは出来ません。

 

コンストラクタの引数に初期値を設定したコード

class Test:
    def __init__(self, name='ゲスト'):
        print('インスタンスの生成時に実行されます')
        self.name = name
    
    def printMyname(self):
        print("self.name :"+ self.name)
        
obj = Test("alex") # インスタンス生成 引数あり
obj.printMyname()

obj2 = Test() # インスタンス生成 引数なし
obj2.printMyname()

 

実行結果:

インスタンスの生成時に実行されます
self.name :alex
インスタンスの生成時に実行されます
self.name :ゲスト

 

コンストラクタの引数がない場合

2行目で設定した‘ゲスト’が、nameにセットされています。

 

最後に

いかがだったでしょうか?

今回はpythonのコンストラクタの使い方でした。

 

新米太郎
新米太郎

お読み頂きありがとうございました!




コメント

タイトルとURLをコピーしました