コンストラクタが実際に「コンストラクタ」と呼ばれるのはなぜですか?
コンストラクター(という名前__new__)は、クラスの新しいインスタンスを作成して返します。したがって、C.__new__クラスメソッドはコンストラクタですクラスCのです。
C.__init__それが作成された後、インスタンスメソッドは、呼び出し元に戻される前に、それを初期化するために、特定のインスタンスで呼び出されます。したがって、そのメソッドはCの新しいインスタンスの初期化子です。
それらはクラスのメソッドとどう違うのですか?
で述べたように公式ドキュメント __init__されるインスタンスが作成された後に呼び出されます。他の方法はこの治療を受けません。
彼らの目的は何ですか?
コンストラクターの目的は、C.__new__新しいCインスタンスの構築中にカスタム動作を定義することです。
初期化子の目的は、C.__init__の各インスタンスのカスタム初期化を定義することですC作成後ことです。
たとえば、Pythonでは次のことができます。
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
しかし、のすべてのインスタンスに10に等しいTest属性を持たせたい場合はx、そのコードを内部に配置できます__init__。
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
すべてのインスタンスメソッド(クラスの特定のインスタンスで呼び出されるメソッド)は、最初の引数としてインスタンスを受け取ります。その引数は慣習的に名前が付けられていselfます。
コンストラクタなどのクラスメソッドは__new__、代わりにクラスを最初の引数として受け取ります。
ここで、x属性のカスタム値が必要な場合は、その値を引数としてに渡すだけです__init__。
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
これがいくつかの疑問を解消するのに役立つことを願っています。すでに他の質問に対する良い回答を受け取っているので、ここで止めます:)
__init__は、イニシャライザです。Python コンストラクタは__new__です。Pythonは自動2フェーズ初期化を使用します-__new__有効だが(通常は)未入力のオブジェクト(bool反例についてはを参照)を返し、オブジェクトは__init__自動的に呼び出されます。これにより、C ++のような言語が部分的に構築されたオブジェクトに伴う問題が回避されます-Pythonにはオブジェクトがありません(ただし、部分的に初期化されている場合があります)。両方をオーバーライドする必要はほとんどありません__new__し、__init__クラスに。