logo

Python コンストラクター

コンストラクターは、クラスのインスタンス メンバーを初期化するために使用される特別なタイプのメソッド (関数) です。

C++ または Java では、コンストラクターはクラスと同じ名前ですが、Python ではコンストラクターの扱いが異なります。オブジェクトを作成するために使用されます。

コンストラクターには 2 つのタイプがあります。

  1. パラメータ化されたコンストラクタ
  2. パラメータ化されていないコンストラクター

コンストラクターの定義は、このクラスのオブジェクトを作成するときに実行されます。コンストラクターは、オブジェクトが起動タスクを実行するのに十分なリソースがあることも検証します。

Pythonでコンストラクターを作成する

Python では、メソッドは __熱__() クラスのコンストラクターをシミュレートします。このメソッドは、クラスがインスタンス化されるときに呼び出されます。それは受け入れます 自己 -keyword を最初の引数として指定すると、クラスの属性またはメソッドにアクセスできるようになります。

クラスオブジェクトの作成時に、必要な数に応じて、任意の数の引数を渡すことができます。 __熱__() 意味。これは主にクラス属性を初期化するために使用されます。すべてのクラスには、単にデフォルトのコンストラクターに依存する場合でも、コンストラクターが必要です。

次の例を考慮して初期化します。 従業員 クラスの属性。

 class Employee: def __init__(self, name, id): self.id = id self.name = name def display(self): print('ID: %d 
Name: %s' % (self.id, self.name)) emp1 = Employee('John', 101) emp2 = Employee('David', 102) # accessing display() method to print employee 1 information emp1.display() # accessing display() method to print employee 2 information emp2.display() 

出力:

 ID: 101 Name: John ID: 102 Name: David 

クラスのオブジェクトの数を数える

コンストラクターは、クラスのオブジェクトを作成するときに自動的に呼び出されます。次の例を考えてみましょう。

 class Student: count = 0 def __init__(self): Student.count = Student.count + 1 s1=Student() s2=Student() s3=Student() print('The number of students:',Student.count) 

出力:

 The number of students: 3 

Python の非パラメーター化コンストラクター

パラメータ化されていないコンストラクタは、値を操作したくない場合、または引数として self のみを持つコンストラクタを使用します。次の例を考えてみましょう。

 class Student: # Constructor - non parameterized def __init__(self): print('This is non parametrized constructor') def show(self,name): print('Hello',name) student = Student() student.show('John') 

Python パラメータ化コンストラクター

パラメータ化されたコンストラクタには、複数のパラメータと 自己 。次の例を考えてみましょう。

 class Student: # Constructor - parameterized def __init__(self, name): print('This is parametrized constructor') self.name = name def show(self): print('Hello',self.name) student = Student('John') student.show() 

出力:

 This is parametrized constructor Hello John 

Python のデフォルト コンストラクター

クラスにコンストラクターを含めないか、宣言を忘れた場合、それがデフォルトのコンストラクターになります。タスクは実行されませんが、オブジェクトが初期化されます。次の例を考えてみましょう。

 class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display() 

出力:

 101 Joseph 

単一クラス内の複数のコンストラクター

別のシナリオを見てみましょう。クラス内で 2 つの同じコンストラクターを宣言するとどうなるかです。

 class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student() 

出力:

 The Second Constructor 

上記のコードでは、オブジェクトは セント 2 番目のコンストラクターと呼ばれますが、どちらも同じ構成を持ちます。最初のメソッドには、 セント 物体。内部的には、クラスに複数のコンストラクターがある場合、クラスのオブジェクトは常に最後のコンストラクターを呼び出します。

注: コンストラクターのオーバーロードは Python では許可されていません。

Python の組み込みクラス関数

クラスに定義されている組み込み関数を次の表に示します。

SN 関数 説明
1 getattr(obj,name,default) オブジェクトの属性にアクセスするために使用されます。
2 setattr(obj, 名前, 値) これは、オブジェクトの特定の属性に特定の値を設定するために使用されます。
3 delattr(obj, 名前) 特定の属性を削除するために使用されます。
4 hasattr(オブジェクト, 名前) オブジェクトに特定の属性が含まれている場合は true を返します。

 class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age # creates the object of the class Student s = Student('John', 101, 22) # prints the attribute name of the object s print(getattr(s, 'name')) # reset the value of attribute age to 23 setattr(s, 'age', 23) # prints the modified value of age print(getattr(s, 'age')) # prints true if the student contains the attribute with name id print(hasattr(s, 'id')) # deletes the attribute age delattr(s, 'age') # this will give an error since the attribute age has been deleted print(s.age) 

出力:

 John 23 True AttributeError: 'Student' object has no attribute 'age' 

組み込みクラス属性

Python クラスには、他の属性とともに、クラスに関する情報を提供するいくつかの組み込みクラス属性も含まれています。

組み込みクラスの属性を次の表に示します。

SN 属性 説明
1 __dict__ クラス名前空間に関する情報を含む辞書を提供します。
2 __ドキュメント__ クラスのドキュメントを含む文字列が含まれています
3 __名前__ クラス名にアクセスするために使用されます。
4 __モジュール__ このクラスが定義されているモジュールにアクセスするために使用されます。
5 __ベース__ これには、すべての基本クラスを含むタプルが含まれています。

 class Student: def __init__(self,name,id,age): self.name = name; self.id = id; self.age = age def display_details(self): print('Name:%s, ID:%d, age:%d'%(self.name,self.id)) s = Student('John',101,22) print(s.__doc__) print(s.__dict__) print(s.__module__) 

出力:

 None {'name': 'John', 'id': 101, 'age': 22} __main__