Pythonのコンストラクター(Constructor)への理解

スポンサーリンク

Pythonのコンストラクター(Constructor)について解説しています。

Pythonのコンストラクター(Constructor)は、新しいインスタンスまたはオブジェクトの作成に使用され、インスタンスの属性(変数)を定義し、それらに値(プロパティ)を割り当てるために用いられます。インスタンスは、クラスに属するオブジェクト(文字列,辞書,数値など)で、英語では「instance」は「実態」という意味。オブジェクトを作成するプロセスは「インスタンス化」と呼ばれる。オブジェクトはクラスのインスタンスです。なお、オブジェクトはそれ自身のプロパティ(詳細なデータ)と動作(メソッド)を持っています。ちなみに、クラスは設計図のようなもので、インスタンスは実際の値を持つクラスのコピーです。

■コンストラクター(Constructor)宣言の構文

def __init__(self): 
    #コンストラクター(Constructor)本体

基本にdef文を用いた__init__() 関数が、コンストラクター(Constructor)と呼ばれ、オブジェクトを作成した時に常に呼び出される。なお、ユーザー定義のクラスやPythonが提供するオブジェクトは、コンストラクター(Constructor)を用いて作成することができます。

■__init__ ()関数とは?

__init__ ()は、コンストラクター(Constructor)であり、オブジェクトの状態を初期化するために使用されます。コンストラクター(Constructor)のタスク(割り当てられた作業、活動)は、クラス(設計図)のオブジェクトの作成時に、クラスのデータメンバーを初期化(値を割り当てる)する。データメンバーとは、データ型(int, char, floatなど)や派生データ型(classなど)を用いてクラスで宣言された変数のこと。

■オブジェクトを作成し、コンストラクター(Constructor)呼び出してみる

world(世界)というclass(設計図)という定義します。定義後、コンストラクター(Constructor)を定義するために、def文と特別な名前である「__init__()」を記述します。さらに括弧内には、特別な引数,パラメーターであるselfを記述します。これでコンストラクター(Constructor)が定義されました。定義後、呼び出した時の処理をコンストラクター(Constructor)の中に記述します。今回はprint()を用いて日本語の文字列を出力させるというものにします。

その後、w_1とw_2という変数を定義し、オブジェクトを作成するプロセスであるインスタンス化を行います。最後にオブジェクトからコンストラクター(Constructor)にアクセスします。

アクセスすると、日本語の文字列が出力されました。

なお、今回、class(設計図)内の各メソッド(コンストラクター(Constructor)を含む)の最初の引数,パラメーターはselfを用いましたが、これは呼び出し元のオブジェクトを参照するためのもので、必ず必要となります。”self”は英語で「自己」という意味。ただし、最初の引数,パラメーターには任意の名前を付けることができます。必ずしもselfでなくともよい。

■コンストラクター(Constructor)の種類

コンストラクター(Constructor)にはいくつか種類があります。

■デフォルト コンストラクター(Default Constructor)

デフォルト コンストラクター(Default Constructor)は、引数を受け入れない単純なコンストラクター(Constructor)です。オブジェクトはデフォルト値で構築されます。オブジェクトの ”self” だけが、このオブジェクトのデフォルト値を設定するための引数,パラメータとしてコンストラクタ・メソッドに提供されます。

■コード(例)

class human:
	def __init__(self):
		self.name = "日本人"

h = human()

print(h.name)

デフォルト コンストラクター(Default Constructor)を実際に用いてみます。今回human(人間)というclass(設計図)という定義します。そしてclass(設計図)の中にコンストラクター(Constructor)を用いて、self.nameという属性に対して、「日本人」というプロパティを定義します。

定義後、class(設計図)のインスタンスを作成するために「h = human()」とします。作成後print()を用いてインスタンスを呼び出します。今回はh.nameとしているため、「日本人」という属性が出力されます。

なお、Google Colaboratory(Python 3.7.13)で実行・検証した結果は上記になります。

■パラメータ化された コンストラクター(Parameterized Constructor)

パラメータ化された コンストラクター(Parameterized Constructor)は、最初の引数,パラメータを”self” と設定し、残りの引数,パラメータはプログラマーによって提供されるものです。

■コード(例)

class human:
	def __init__(self,name):
		self.name = name

h = human("日本人")

print(h.name)

パラメータ化された コンストラクター(Parameterized Constructor)を実際に用いてみます。今度は、デフォルト コンストラクター(Default Constructor)とは少し異なり、human(人間)というclass(設計図)という定義します。そしてclass(設計図)の中にコンストラクター(Constructor)を用いてself.nameという属性を定義します。この時に、コンストラクター(Constructor)の引数,パラメータとして設定した”name(値,プロパティ)”を”=(イコール)”とします。

そして、class(設計図)のインスタンスを作成するために「h = human()」としますが、この時に括弧内に引数,パラメータとしてコンストラクター(Constructor)を用いて定義した属性の値,プロパティに渡すものを渡します。今回は「日本人」とします。

最後に、h.nameという値,プロパティの情報をprint()を用いて出力します。

なお、Google Colaboratory(Python 3.7.13)で実行・検証した結果は上記になります。

■パラメーター化されていない コンストラクター(Non-Parametrized Constructor)

パラメーター化されていない コンストラクター(Non-Parametrized Constructor)は、各オブジェクトをデフォルト値で初期化するために使用されます。さらにこのコンストラクター(Constructor)は、オブジェクトを生成する時に引数,パラメータを受け取らない。その代わり、全てのオブジェクトを同じ値のセットで初期化されます。

■コード(例)

class human:

    def __init__(self):
        self.name = "日本人"
        self.address = "地球"

    def show(self):
        print('属性:', self.name, '住所:', self.address)

h = human()

h.show()

パラメーター化されていない コンストラクター(Non-Parametrized Constructor)を実際に用いてみます。human(人間)というclass(設計図)という定義します。そしてclass(設計図)の中にコンストラクター(Constructor)を用いて「self.name」と「self.address」という属性を定義します。この時に、「self.name」と「self.address」という属性には、”=(イコール)”を用いて、日本語の文字列を入れます。この日本語の文字列が値,プロパティとなります。

その後、def文を用いてshowという関数を定義し、この関数が呼び出された時に実行される処理としては、print()を用いて「self.name」と「self.address」という値,プロパティを出力させるというものです。

関数を定義後、class(設計図)のインスタンスを作成するために「h = human()」とします。これで、オブジェクトを作成するプロセスが完了となります。

最後に、オブジェクトを使用しshow()というインスタンスメソッド(動作)を呼び出します。

なお、Google Colaboratory(Python 3.7.13)で実行・検証した結果は上記になります。今回は、オブジェクトは作成されていますが、コンストラクターはself以外は受け取っていない。

コメント

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