Python 複数コンストラクター

Muhammad Maisam Abbas 2023年10月10日
  1. Python のコンストラクター
  2. Python の複数のコンストラクター
Python 複数コンストラクター

このチュートリアルでは、コンストラクターと、Python で複数のコンストラクターの必要性に対処する方法について説明します。

Python のコンストラクター

Java、C++、C# プログラミング言語などのプログラミング言語では、クラスのオブジェクトが初期化されたときにのみ実行されるコンストラクター関数の概念があります。コンストラクター関数は、すべてのクラス属性を初期化するために使用されます。このコンストラクター関数の名前は、クラスの名前と同じです。コンストラクター関数の概念は Python でも同じですが、コンストラクター関数の名前はすべてのクラスで __init__() です。Python のコンストラクターは、常に 1つのパラメーター、つまり呼び出し元オブジェクトへのポインターを取ります。次のコードスニペットは、Python でパラメーター化されていないコンストラクターを作成する方法を示しています。

class Person:
    def __init__(self):
        print("Constructor Function")


if __name__ == "__main__":
    p1 = Person()

出力:

Constructor Function

Person クラスのパラメーター化されていないコンストラクターを作成し、main 関数で Person クラスオブジェクトを作成しました。コンストラクターは、p1 = Person() でオブジェクトを作成したときに呼び出されました。

Python の複数のコンストラクター

Java、C#、および C++ プログラミング言語には、複数のコンストラクターと呼ばれる概念があり、1つのクラスに対して必要な数のコンストラクターを作成できます。残念ながら、Python では 1つのクラスに複数のコンストラクターを定義することはできません。この制限を回避する一般的な方法は、デフォルトのパラメーターコンストラクターを使用することです。デフォルトのパラメーターコンストラクターは、クラスオブジェクトの作成中にパラメーターが渡されなかった場合に、クラス属性に値を自動的に割り当てるコンストラクターです。オブジェクトの作成中に値が指定された場合、デフォルトのパラメーターコンストラクターは指定された値をクラス属性に割り当てます。次のコードスニペットは、Python のデフォルトのパラメーターコンストラクターを使用して複数のコンストラクターが不要になる方法を示しています。

class Person:
    def __init__(self, name="Tom"):
        self.name = name

    def show(self):
        print("Name = ", self.name)


if __name__ == "__main__":
    p1 = Person()
    p2 = Person("Mark")
    p1.show()
    p2.show()

出力:

Name =  Tom
Name =  Mark

関数定義中にデフォルト値を指定することにより、上記のコードでデフォルトのパラメーターコンストラクターを作成しました。Person クラスのコンストラクターはパラメーター名を受け取り、それをクラスパラメーターname に割り当てます。パラメータ名のデフォルト値は Tom です。main 関数で Person クラスの 2つのオブジェクト p1p2 を作成しました。オブジェクト p1 は、初期化中に値を指定しません。オブジェクト p2 は、コンストラクターパラメーターとして Mark を渡します。次に、p1p2 を使用して show() 関数を呼び出しました。show() 関数は、name 属性の値を表示します。p1show() 関数を呼び出すと、出力はデフォルト値 Name = Tom になりますが、p2show() 関数を呼び出すと、指定したため、出力は Name = Mark になります。オブジェクト p2 の作成中に Mark

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Python Constructor