2011-02-24 7 views
3

Pythonで派生クラスに異なるコンストラクタを使用するにはどうすればよいですか?私はこのような何かしようとした場合Python:派生クラスで異なるコンストラクタのフットプリント

:私は

TypeError: Error when calling the metaclass bases 
module.__init__() takes at most 2 arguments (3 given) 

を取得

from abc import ABCMeta, abstractproperty, abstractmethod 

class AbstractClass(object): 
    __metaclass__ = ABCMeta 

    def __init__(self): 
     pass 

import AbstractClass 

class DerivedClass(AbstractClass): 

    _prop = '' 
    def __init__(self, param): 
     self._prop = param 

を私は

if (cl_param == '1'): 
    obj = DerivedClass1('1', 'c') 
else if (cl_param == '2'): 
    obj = DerivedClass2('2', 'foo', 2) 
ような何かをしたいと思います3210

など。残りのインターフェイスは各クラスで似ていますが、異なる初期化パラメータが必要です。あるいは、リストにパラメータを渡してこれを回避する必要がありますか?

+1

「DerivedClass」コンストラクタを呼び出す際に、そのエラーをどのようにして呼び出すのですか? –

+0

最後のコードスニペット(私はこれまでに派生クラスを1つしか持っていないので、まだif-else構造を持っていません)とほとんど同じです。私は自己+ 3つのパラメータを持っています。私はそれをobj = DerivedClass( '1'、 '2'、 '3')のように呼んでいます。 – Makis

+0

インスタンス以外の単一のパラメータしか取らないように定義しているのが分かりますよね? –

答えて

3
+0

したがって、継承は、例えば、足跡が異なる複数のコンストラクタを使用できるC++? – Makis

+2

Pythonは関数/メソッドのオーバーロードをサポートしていません。 –

+0

ああ、大丈夫です。私は気付かなかった。 – Makis

3
class DerivedClass(AbstractClass): 

    _props = '' 
    def __init__(self, *params): 
     self._props = params 
     print params # (1,2,3,4) 

c = DerivedClass(1,2,3,4) 
8

あなたはクラスではなく、モジュール継承を確認してください。

に間違いをDjangoのモデルを使用しているとき、それは

されている必要があるときmodels.Model

からの私のモデルを継承して、私は

class Entry(models): 
    content = models.TextField() 
    pub_date = models.DateTimeField() 

のようなものを持っていた私は、同じエラーメッセージが表示されました

class Entry(models.Model): 
    content = models.TextField() 
    pub_date = models.DateTimeField() 

モデル。モデル

関連する問題