多重继承如何与super()和不同的__init__()参数一起工作?

11 浏览
0 Comments

多重继承如何与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函数提供相关的参数?

欢迎提供任何建议!

附:由于我有几个问题,我将其加粗并编号了。

0