2016-05-12 5 views
1

でコンストラクタをバイパス:は、私は、継承の以下のチェーンがあるとのPython 2.7

class Base(object): 
    def __init__(self, a=1, b=2): 
     print "BASE" 
     print a 
     print b 

class Inherit1(Base): 
    def __init__(self, a=3, b=4): 
     print "INHERIT1" 
     super(Inherit1, self).__init__(a=a, b=b) 

class Inherit2(Inherit1): 
    def __init__(self, a=5, b=6): 
     print "INHERIT2" 
     super(Inherit2, self).__init__(a=a, b=b) 

Inherit2() 

それはなり出力:

INHERIT2 
INHERIT1 
BASE 
5 
6 

しかし、私はInherit1のコンストラクタを回避したいと思い、すなわち出力

INHERIT2 
BASE 
5 
6 

そうする方法はありますか?

EDIT Base/Inherit1は変更できません。Inherit2のみ編集できます。

+1

ようsuper(Inherit1, self)にスーパー変更super(Inherit2, self)を呼び出します。 – Hamms

+0

あなたが主張することはしません。 'INHERIT2'' BASE''5''5' – torek

+0

その他の質問:' Inherit1'から継承する必要がありますか?あなたは 'Inherit1'または' Base'を変更できますか?多くのオプションがありますが、どちらが良いかは、なぜあなたがこれをやっているのか、あなたの制限が何であるかによって部分的に異なります。この質問は非常に抽象的であるため、別のものを推薦するのは難しいです。 –

答えて

1

編集:非常に簡単な解決策がある場合、すべてのところで困惑しました。

あなたが提供するコードは、あなたが提供する出力を生成しませんので

class Inherit2(Inherit1): 
    def __init__(self, a=5, b=5): 
     print "INHERIT2" 
     super(Inherit1, self).__init__(a=a, b=b) 
+0

親クラスがその子クラスの実装の詳細を認識することはかなり悪いデザインです – Hamms

+1

私はこの問題がないより良いものに私の答えを変更しました:) –

+0

継承から 'Base'を削除するだけです。これは良いことです。 – Serdalis

関連する問題