2017-05-29 14 views
0

私は2つのクラスを持ち、それぞれはもう一方から継承しています。 ParentChildとしましょう。 これらのクラスから作成されたオブジェクトの両方が両方のクラスについてPython継承とメソッドのオーバーライド

funA(): 
    X = another_function() 
    Y = # some value 
    X.append(Y) 
    # do other computations 

以下のようになります。これは、機能funAを使用する必要があり、機能funAがリストXための別の方法で計算する関数another_function()、を除いて、ほとんど同じに見えますParentであり、Childでは異なっています。もちろん、私は子クラスの関数funAをオーバーライドできることを知っていますが、この関数は非常に長く、いくつかの操作を行うので、コピー貼り付けは少し無駄でしょう。一方、私は、親クラスがanother_function()の1つのバージョンを使用し、子クラスがanother_function()の2番目のバージョンを使用する必要があることを区別する必要があります。おそらく、another_functionのバージョン(another_function_v1another_function_v2と呼ぶ)を各クラスで使用するか、または関数全体をオーバーライドする場合の唯一の解決策を指すのは可能でしょうか?funA

+1

を使用することができ、正常な機能、あるとし、その後、ちょうど*子でその*をオーバーライドしますか? – jonrsharpe

+0

は 'funA'静的メソッドかクラス/インスタンスメソッドですか? –

+0

@AzatIbrakovそれはクラスメソッドです – Ziva

答えて

1

あなたの投稿は明確ではありませんが、私はfunAParentの方法であると想定しています。 funAあなたはあまりにもanother_methodクラスメソッドを作ることになるでしょうクラスメソッド...

1

であれば、私はどこanother_functions知らない

class Parent(object): 
    def another_method(self): 
     return another_function_v1() 

    def funA(self): 
     X = self.another_method() 
     Y = # some value 
     X.append(Y) 
     # do other computations 

class Child(Parent): 
    def another_method(self): 
     return another_method_v2() 

NB:はい場合は、ちょうど右の関数を呼び出すいくつかのanother_methodメソッドを追加来る。私は、彼らがインポートされ、なぜ `function_calling_method`を呼び出して` another_function`への呼び出しを置き換えるものではありませ

class Parent(object): 
    another_function = another_function_v1 
    def funA(self): 
     X = self.another_function() 
     Y = # some value 
     X.append(Y) 
     # do other computations 

class Child(Parent): 
    another_function = another_function_v2 
関連する問題