に連鎖する:コンストラクタは、私は私のクラスでは2つのコンストラクタ持っているのpython
def __init__(self):
self(8)
def __init__(self, size):
self.buffer = [1] * size
私はデフォルトのサイズで秒を呼び出すための最初のコンストラクタをしたいです。これはPythonで達成可能ですか?
に連鎖する:コンストラクタは、私は私のクラスでは2つのコンストラクタ持っているのpython
def __init__(self):
self(8)
def __init__(self, size):
self.buffer = [1] * size
私はデフォルトのサイズで秒を呼び出すための最初のコンストラクタをしたいです。これはPythonで達成可能ですか?
あなたは(、コメントで指摘したように__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)
'__init__'はコンストラクタではなく、初期化子です。 ['__init__'をコンストラクタとして参照してください?](http://stackoverflow.com/questions/6578487/init-as-a-constructor)。 – Nathan
それを指摘してくれてありがとう、@ Nathan。私はそれに応じて私の答えを編集しました。 –
いいえ、Pythonでメソッドをオーバーロードすることはできません。この場合は、あなただけの代わりにsize
パラメータのデフォルト値を使用することができます。
def __init__(self, size=8):
self.buffer = [1] * size
をおそらくない、このように。 Pythonクラスはメソッドとプロパティを格納するために内部ディクショナリを使用し、同じ名前を持つ2番目のメソッドは最初のメソッドをオーバーライドします。 あなたは2つのコンストラクタを持っていない
def __init__(self, size = 8):
self.buffer = [1] * size
、これを行うには、あなたの余分なパラメータにデフォルト値を割り当てることができ、第二には、最初に上書きされます。 – u0b34a0f6ae