2017-08-01 12 views
-1

別のクラス(SuperABCと呼ぶ)を継承するクラス(ABCと呼ぶ)を定義する必要があります。私が継承しているクラス(SuperABC)には、使用する必要があるメソッド(funcと呼ぶ)があります。しかし問題は、クラスABCにクラスのfuncメソッドを呼び出して、同じ名前(つまり、func)のメソッドを定義しなければならないということです。私はfuncメソッドをSuperABCから継承することができますが、別名でこの問題を解決できることに気付きました。それは可能ですか?Python - 異なる名前のクラスからメソッドを継承する

現在、SuperABCクラスのfuncメソッドをコピーし、ABCクラスに追加し、その名前を_funcに変更しました。これを行う他の方法はありますか?

最後に、superの使用方法を調べました。しかし、私が読んだことから、superは、そのメソッドを1つのクラスから継承している場合に現在の質問を解決できるようです。 SuperABCBatABCを継承し、メソッドのfuncメソッドのABCクラスの名前またはその他の方法を変更して使用する場合はどうなりますか?それは可能ですか?

+1

'ABC.func()'の中で 'SuperABC.func()'を呼び出すと何が問題になりますか? – Evert

答えて

2

は、おそらくこのような何か意味:

def func(*args, **kwargs): 
     return 

ことを行う別の方法:

class ABC(SuperABC): 
    def _func(*args, **kwargs): 
     return SuperABC.func(*args, **kwargs) 

をそして、あなたは、元のfuncアドオンの実際の継承を取り除きたい場合は2番目のステップは、__init__の段階でfuncを変更することですが、慎重に行われていない場合は、そこに他のものを上書きすることがあります。

あなたは2つの異なるクラス(とfuncは両方で同じ名前である)から2 funcを継承したい場合は、あなたの場合は、それらの一つの第一

0

コールを転送するだけです。

def _func(*args, **kwargs): 
    return func(*args, **kwargs) 
+0

'_func = func'はよりシンプルで効率的です(追加の関数の構築と呼び出しを避けるため)。 – chepner

0

の名前を変更する仲介クラスを定義する必要がありますそれを、この特定の方法を行うためにを必要とする:あなたは、Python 2を使用している場合

subclass_function_name = super().parentfunctionname 

は、あなたがスーパーで引数を追加する必要があります()。これはではない parentfunctionnameを呼び出すが、関数オブジェクトへの参照であることに注意してください。

関連する問題