は親

2017-12-15 9 views
-1

のためにスキップのは、私は階層(かなりの簡略化)は親

class Ancestor: 
    def __init__(self, *args, **kwargs): 
     super(Ancestor, self).__init__(*args, **kwargs) 
     self.a = 1  

の下に、私はそのChilda属性

class Child(Ancestor): 
    def __init__(self, *args, **kwargs): 
     super(Ancestor, self).__init__(*args, **kwargs) 
     self.b = 2 
へのアクセス権を持っている必要はありませんしているとしましょう

しかし、私はその​​がab

class Descendant(Child): 
    def __init__(self, *args, **kwargs): 
     super(Descendant, self).__init__(*args, **kwargs) 
へのアクセスの両方を持つようにしたいです

目的の動作を取得し、複数の継承を回避する方法はありますか? class Descendant(Ancestor, Child)

+3

をあなたがしてAncestor' 'から継承しませんA'属性'へのアクセスを必要としない場合。他のクラスを作成する –

+0

@vishes_shell、これはオプションではありません。私は現在の構造を維持しなければならない –

答えて

1

これは多重継承の場合のようです。子供は先祖から継承していないはずですが、子孫の両方から継承することができます。

class Child: 
    ... 

class Descendant(Ancestor, Child): 
    ... 
+0

私は複数の継承を避けたいと言いました... –

+0

申し訳ありませんが、私はそれを見ませんでした。なぜ、具体的に? –

+0

Projectにいくつかの奇妙な制限があるため:複数の継承を適用​​する場合、コードレビューで '-2'を取得します –