12

私はクラス AbstractDataHandle と彼のinitメソッド、およびクラス Classifier を持っています。Classifier に Java のような 2 つのコンストラクターが必要です。1 つはそのスーパークラスから継承され、もう 1 つは新しいものです。

それは次のようになります(ただし、2つのコンストラクターを「保持」するつもりです):

class AbstractDataHandle():
    def __init__(self, elements, attributes, labels):
        self._load(elements, attributes, labels)


class Classifier(AbstractDataHandle):
    def __init__(self, classifier="LinearSVC", proba=False):
        self._fit(classifier, proba)

1 つのクラスに 2 つのコンストラクターを含めることはできますか? はいの場合、スーパークラスからコンストラクターを継承して、新しいコンストラクターを追加できますか?

前もって感謝します。

4

3 に答える 3

0

受け入れられた回答には方法がありますが、これはかなり柔軟だと思います。複雑ですが、非常に柔軟です。

クラスが開始されると、initはメソッドを呼び出し、文字列引数 (インスタンス化から取得) を渡します。その関数は条件を使用して適切な「コンストラクター」関数を呼び出し、値を初期化します。可能な開始値のセットが異なるとしましょう。

他の引数を提供する必要がある場合 (たとえば、実行時にのみ値を持つ可能性がある場合)、init () でデフォルト値を使用してオプションの引数を許可し、通常どおりinitでそれらを初期化できます。

class MyClass:
def __init__(self,argsSet1, otherAttribute="Assigning this default value 
             to make this other argument optional",):
    self.selectArgSet(argsSet1)
    self.otherAttribute = otherAttribute
    print otherAttribute
def selectArgSet(self,ArgSet1):
    if ArgSet1 == "constructorArgSet1":
        self.constructorArgSet1()
    elif ArgSet1 == "constructorArgSet2":
        self.constructorArgSet2()
def constructorArgSet1(self):
    print "Use this method as Constructor 1"
    self.variable1 = "Variable1 value in Constructor 1"
    self.variable2 = "Variable2 value in Constructor 1"
    print self.variable1
    print self.variable2
def constructorArgSet2(self):
    print "Use this method as Constructor 2"


      self.variable1 = "Variable1 value in Constructor 2"
        self.variable2 = "Variable2 value in Constructor 2"
        print self.variable1
        print self.variable2

myConstructor_1_Instance = MyClass("constructorArgSet1")
myConstructor_2_Instance = MyClass("constructorArgSet2", "You can still 
                                           initialize values normally")

その出力は次のとおりです。

このメソッドをコンストラクター 1 として使用する

コンストラクター 1 の Variable1 値

コンストラクター 1 の Variable2 値

デフォルト値を割り当てて、この他の引数をオプションにします

このメソッドをコンストラクタ 2 として使用する

コンストラクタ 2 の Variable1 値

コンストラクタ 2 の Variable2 値

値を正常に初期化できます

于 2015-03-15T05:09:24.073 に答える