Pythonでクラスのインスタンスの生成と初期化

今回は Python におけるインスタンス生成方法と、インスタンスの初期化方法について説明します。インスタンスはオブジェクト指向に必要な概念なので、ぜひ使えるようにしておきましょう。

インスタンスとは

クラスは、データや処理の定義をまとめた雛型のようなものであり、これらのデータやメソッドを使うためには「インスタンス」と呼ばれるものを生成する必要があります。インスタンスとは、クラスを実体化したものです。ひとつのクラスに対してインスタンスは複数生成することができ、それぞれのインタンスは別々のデータをもちます。

インスタンスを生成する

以下のサンプルプログラムを用いてクラスのインスタンスを生成する方法を説明していきます。

class MyClass:
    def set_value(self, text):  # クラス内の value 変数に値を代入するメソッド
        self.value = text
 
    def print_value(self):      # 変数 value の値を表示するメソッド
        print(self.value) 

クラス MyClass は変数 value をもち、変数 value に値を代入するメソッド set_value と、変数 value の値を表示するメソッド print_value をもちます。

今回はこの MyClass のインスタンスを生成します。インスタンスを生成するときは、インスタンスの後に括弧 () を付けて関数を呼び出すときと同じように記述します。

class MyClass:
    def set_value(self, text):  # クラス内の value 変数に値を代入するメソッド
        self.value = text
 
    def print_value(self):      # 変数 value の値を表示するメソッド
        print(self.value)

if __name__ == "__main__":
    a = MyClass()               # MyClass のインスタンスを生成
    a.set_value("abc")          # 変数 value に文字列 "abc" を代入 
    a.print_value()             # abc

上の例では、MyClass() を実行することによりインスタンスを生成しています。生成されたインスタンスは変数 a に代入され、変数 a を用いて、インスタンスのメソッド set_value と print_value を使用しています。また、クラスのメソッドや変数を使用するときは、「インスタンス変数.メソッド名」あるいは「インスタンス変数.変数名」のようにドット . を使って記述します。

インスタンスの初期化

上記の例では、インスタンスの生成後に set_value メソッドを用いて変数 value の値を初期化しました。しかし、このような記述の方法はあまり良くありません。たとえば、複数のインスタンスを生成するとき、何度も value の値を初期化しなくてはならず、コードの記述量が増えたり、初期化をし忘れたりしてしまう可能性があります。このような問題を解決するために、クラスの初期化が必要なときは初期化メソッドを使用します。

初期化メソッド __init__()

Python では初期化メソッド __init__() を使用することで、インスタンス生成時に初期化処理を記述することができます。__init__() はインスタンス生成時に自動的に呼ばれます。

初期化メソッドの __init__() には第1引数に必ず self を渡すようにします。self にはインスタンス自体が渡されます。これにより、初期化メソッド内でインスタンス変数を作成したり、参照したりすることができます。クラスを生成するときに指定した引数は、初期化メソッドの2番目以降の引数に渡されていきます。

class MyClass:
    def __init__(self, text):   # インスタンス生成時に自動的に呼ばれるメソッド
        self.value = text
 
    def print_value(self):      # 変数 value の値を表示するメソッド
        print(self.value)

if __name__ == "__main__":
    a = MyClass("abc")          # MyClass のインスタンスを生成
    a.print_value()             # abc

上の例では、MyClass("abc") でインスタンスを生成しています。このとき __init__() 自動的に実行されます。インスタンス生成時に指定した引数 "abc" は __init__() の2番目の引数 text に代入されます。 初期化メソッドの中では value という変数を生成し "abc" の値を代入しています。最後に value の値を print_value メソッドを用いて確認してみると "abc" が表示され、きちんと初期化がされていることが確認できます。

まとめ

今回は、Python におけるインスタンスの生成方法と初期化方法について説明しました。インスタンスの初期化はプログラムを簡潔に記述でき、変数の値の代入忘れによるエラーの防止に役立つので、ぜひ活用してみてください。


イベント

2017/12/05(火)
Design Thinking Square