2016-10-25 4 views
0

私は、同じ実装を持つ2つのクラスが必要な問題を抱えています。それらの間の唯一の違いは、異なる名前と基本クラスになります。これを行う合理的な方法は何ですか?基本クラスのみが異なる2つのクラス

1つの明白な解決策は、このような実装をDRYに違反してコピーすることです:

class FooA(BaseA): 
    def frobnicate(self): 
     print("frob") 

class FooB(BaseB): 
    def frobnicate(self): 
     print("frob") 
+0

もっと具体的になりますか? – Amit

+0

MCVEを提供してください – Alden

+1

ミックスインをお探しですか? 'Foo'と' Bar'があり、Mixinにいくつかのサービスの共通実装がある場合、 'BetterFoo(Mixin、Foo)'と 'BetterBar(Mixin、Bar)'を作ることができます。 [抽象基本クラス](https://docs.python.org/3/library/abc.html)も考慮してください。 – tdelaney

答えて

1

あなたは、単一のミックスインクラスでインタフェースと共通の機能を実装するために多重継承を使用することができます。たくさんのクラスでfrobnicateへの明確な欲求が与えられた場合、ただの実装を実装するだけです。 Pythonはクラスを右から左に構築し、ミックスインが一番左に配置されます。

class Frobnicator(object): 
    def frobnicate(self): 
     print("frob") 

class FooA(Frobnicator, BaseA): 
    pass 

class FooB(Frobnicator, BaseB): 
    pass 

ミックスインは通常、自分の__init__を実装していないことに注意 - それは、基本クラスの仕事です。

関連する問題