2011-12-04 13 views
5

に連鎖する:コンストラクタは、私は私のクラスでは2つのコンストラクタ持っているのpython

def __init__(self): 
    self(8) 

def __init__(self, size): 
    self.buffer = [1] * size 

私はデフォルトのサイズで秒を呼び出すための最初のコンストラクタをしたいです。これはPythonで達成可能ですか?

+3

、これを行うには、あなたの余分なパラメータにデフォルト値を割り当てることができ、第二には、最初に上書きされます。 – u0b34a0f6ae

答えて

9

あなたは(、コメントで指摘したように__init__is not really a constructor)をPythonで複数の初期化子を定義することはできませんが、例えば、デフォルト値を定義することができます。上記のコードで

def __init__(self, size=8): 
    self.buffer = [1] * size 

を、サイズ8のバッファがありますデフォルトで作成されますが、sizeパラメータが指定されている場合は、代わりにパラメータが使用されます。

たとえば、イニシャライザがExampleというクラスの内部にあるとします。この呼び出しは、サイズ8(デフォルト)の緩衝液でクラスの新しいインスタンスを作成します。

e = Example() 

この呼び出しは、サイズ10の緩衝液を用いて新しいインスタンスを作成します。一方で:

e = Example(10) 

代わりに、次のようにコンストラクタを呼び出すこともできます。

e = Example(size=10) 
+1

'__init__'はコンストラクタではなく、初期化子です。 ['__init__'をコンストラクタとして参照してください?](http://stackoverflow.com/questions/6578487/init-as-a-constructor)。 – Nathan

+0

それを指摘してくれてありがとう、@ Nathan。私はそれに応じて私の答えを編集しました。 –

5

いいえ、Pythonでメソッドをオーバーロードすることはできません。この場合は、あなただけの代わりにsizeパラメータのデフォルト値を使用することができます。

def __init__(self, size=8): 
    self.buffer = [1] * size 
1

をおそらくない、このように。 Pythonクラスはメソッドとプロパティを格納するために内部ディクショナリを使用し、同じ名前を持つ2番目のメソッドは最初のメソッドをオーバーライドします。 あなたは2つのコンストラクタを持っていない

def __init__(self, size = 8): 
    self.buffer = [1] * size 
関連する問題