Python のコンストラクター

前提条件: Python によるオブジェクト指向プログラミング , オブジェクト指向 Python3

Python3




class> GeekforGeeks:> > # default constructor> > def> __init__(> self> ):> > self> .geek> => 'GeekforGeeks'> > # a method for printing data members> > def> print_Geek(> self> ):> > print> (> self> .geek)> # creating object of the class> obj> => GeekforGeeks()> # calling the instance method using the object obj> obj.print_Geek()>

出力

GeekforGeeks 

の例 パラメータ化されたコンストラクタ:

Python3




class> Addition:> > first> => 0> > second> => 0> > answer> => 0> > # parameterized constructor> > def> __init__(> self> , f, s):> > self> .first> => f> > self> .second> => s> > def> display(> self> ):> > print> (> 'First number = '> +> str> (> self> .first))> > print> (> 'Second number = '> +> str> (> self> .second))> > print> (> 'Addition of two numbers = '> +> str> (> self> .answer))> > def> calculate(> self> ):> > self> .answer> => self> .first> +> self> .second> # creating object of the class> # this will invoke parameterized constructor> obj1> => Addition(> 1000> ,> 2000> )> # creating second object of same class> obj2> => Addition(> 10> ,> 20> )> # perform Addition on obj1> obj1.calculate()> # perform Addition on obj2> obj2.calculate()> # display result of obj1> obj1.display()> # display result of obj2> obj2.display()>

出力

First number = 1000 Second number = 2000 Addition of two numbers = 3000 First number = 10 Second number = 20 Addition of two numbers = 30 

例:

パイソン




class> MyClass:> > def> __init__(> self> , name> => None> ):> > if> name> is> None> :> > print> (> 'Default constructor called'> )> > else> :> > self> .name> => name> > print> (> 'Parameterized constructor called with name'> ,> self> .name)> > > def> method(> self> ):> > if> hasattr> (> self> ,> 'name'> ):> > print> (> 'Method called with name'> ,> self> .name)> > else> :> > print> (> 'Method called without a name'> )> # Create an object of the class using the default constructor> obj1> => MyClass()> # Call a method of the class> obj1.method()> # Create an object of the class using the parameterized constructor> obj2> => MyClass(> 'John'> )> # Call a method of the class> obj2.method()>

出力

Default constructor called Method called without a name ('Parameterized constructor called with name', 'John') ('Method called with name', 'John') 

説明:

この例では、デフォルト コンストラクターとパラメーター化されたコンストラクターの両方を使用してクラス MyClass を定義します。デフォルトのコンストラクターは、パラメーターが渡されたかどうかを確認し、それに応じてメッセージをコンソールに出力します。パラメーター化されたコンストラクターは、単一のパラメーター名を受け取り、オブジェクトの name 属性をそのパラメーターの値に設定します。

また、オブジェクトに name 属性があるかどうかをチェックし、それに応じてメッセージをコンソールに出力するメソッド method() も定義します。

両方のタイプのコンストラクターを使用して、クラス MyClass の 2 つのオブジェクトを作成します。まず、デフォルト コンストラクターを使用してオブジェクトを作成します。これにより、「デフォルト コンストラクターが呼び出されました」というメッセージがコンソールに出力されます。次に、このオブジェクトでメソッド() メソッドを呼び出します。これにより、「名前なしで呼び出されたメソッド」というメッセージがコンソールに出力されます。

次に、パラメータ化されたコンストラクターを使用してオブジェクトを作成し、John という名前を渡します。コンストラクターは自動的に呼び出され、「パラメーター化されたコンストラクターが John という名前で呼び出されました」というメッセージがコンソールに出力されます。次に、このオブジェクトに対してメソッド() メソッドを呼び出します。これにより、メッセージ「メソッドは John という名前で呼び出されます」というメッセージがコンソールに出力されます。

全体として、この例は、両方のタイプのコンストラクターを Python の単一クラスに実装する方法を示しています。

Python でコンストラクターを使用する利点:

    オブジェクトの初期化 : コンストラクターは、クラスのオブジェクトを初期化するために使用されます。これらを使用すると、属性またはプロパティのデフォルト値を設定したり、カスタム データでオブジェクトを初期化したりできます。実装が簡単: コンストラクターは Python で簡単に実装でき、__init__() メソッドを使用して定義できます。
  • 可読性の向上: コンストラクターは、どの値がどのように初期化されるかを明確にすることで、コードの可読性を向上させます。
  • カプセル化 : コンストラクターを使用すると、オブジェクトの属性が正しく制御された方法で初期化されるようにすることで、カプセル化を強制できます。

Python でコンストラクターを使用するデメリット:

    オーバーロードはサポートされていません: 他のオブジェクト指向言語とは異なり、Python はメソッドのオーバーロードをサポートしません。これは、1 つのクラス内に異なるパラメーターを持つ複数のコンストラクターを含めることはできないことを意味します。機能の制限: Python のコンストラクターは、他のプログラミング言語のコンストラクターと比較して機能が制限されています。たとえば、Python には、public、private、protected などのアクセス修飾子を含むコンストラクターがありません。コンストラクターは不要な場合があります: 場合によっては、属性のデフォルト値で十分なため、コンストラクターが必要ない場合があります。このような場合、コンストラクターを使用すると、コードが不必要に複雑になる可能性があります。

全体として、Python のコンストラクターは、オブジェクトの初期化とカプセル化の強制に役立ちます。ただし、これらは常に必要なわけではなく、他のプログラミング言語のコンストラクターと比較して機能が制限されています。