2015-10-19 98 views
1

我希望能够从两个不同的输入到其__init__方法中的不同类继承。我如何正确地从它们继承?如何从具有不同__init__输入的多个类继承?

下面是什么,我试图完成一个简单的例子:

class a: 
    def __init__(self): 
     print("Hello") 


class b(a): 
    def __init__(self): 
     super().__init__() 
     print("World") 


class c: 
    def __init__(self, text): 
     print(text) 


class d(a, c): 
    def __init__(self): 
     super().__init__('Kronos') # <-- This breaks (and understandably so) 

虽然类似多重继承的其他许多问题(即How does Python's super() work with multiple inheritance?),我正在寻找如何继承从具有不同输入的多个类到它们的__init__

+0

的可能的复制[如何Python的超()与多重继承工作?](http://stackoverflow.com/questions/3277367/how-does -pythons-super-work-with-multiple-inheritance) – electrometro

+0

考虑在你的'__init__'方法中加入一个'* args,** kwargs' –

+0

你可以试试我的编辑 – DreadfulWeather

回答

2

我相信你可以像下面

class d(a,c): 
    def__init__(self,text): 
     a.__init__(self) 
     c.__init__(self,text) 
+0

啊,我们走了。是的,这就是我要找的。对于那些感兴趣的人来说,这不仅执行'print'语句,而且如果你有属性或方法,它们被正确地继承。 – KronoS

+0

我也会在执行中反转a和c。使用'super'方法'__mro__'的顺序是从左到右。这意味着如果我有一个在'a'和'c'中定义的属性,'a'会首先解决该属性,我相信。 – KronoS

+1

这个(与super不同)不能保证继承树中的每个类只被初始化一次。看看例子[这里](https://rhettinger.wordpress.com/2011/05/26/super-considered-super/)。特别是_Practical_Advice_,并使它们都具有相同的接口,或接受kwargs。 –

相关问题