多重继承如何与super()和不同的__init__()参数一起工作?
多重继承如何与super()和不同的__init__()参数一起工作?
我刚开始学习一些更高级的Python主题(至少对我来说是高级的)。我现在正在阅读关于多继承以及如何使用super()的内容。我大致上明白super函数的用法,但是,只是这样做有什么问题吗?:
class First(object): def __init__(self): print "first" class Second(object): def __init__(self): print "second" class Third(First, Second): def __init__(self): First.__init__(self) Second.__init__(self) print "that's it"
关于super(),Andrew Kuchling的关于Python缺陷的文章说:
当衍生类从多个基类继承并且其中一些或全部有init方法时,使用super()也是正确的
所以我将上面的示例重写如下:
class First(object): def __init__(self): print "first" class Second(object): def __init__(self): print "second" class Third(First, Second): def __init__(self): super(Third, self).__init__(self) print "that's it"
然而,这只会运行它能找到的第一个init方法,也就是在First中的方法。super()能用来同时运行First和Second的init方法吗?如果可以,应该怎么做?运行两次super(Third, self).__init__(self)只会运行First.init()两次..
为了增加一些困惑,如果继承的类的init()函数接受不同的参数会怎么样。例如,如果我有这样的代码:
class First(object): def __init__(self, x): print "first" class Second(object): def __init__(self, y, z): print "second" class Third(First, Second): def __init__(self, x, y, z): First.__init__(self, x) Second.__init__(self, y, z) print "that's it"
我怎样才能使用super()向不同的继承类的init函数提供相关的参数?
欢迎提供任何建议!
附:由于我有几个问题,我将其加粗并编号了。