为什么在多重继承中只调用一个类init方法

时间:2017-07-14 10:24:08

标签: python python-2.7 multiple-inheritance

在模块a.py

class Foo(object):
    def __init__(self):
        self.foo = 20

class Bar(object):
    def __init__(self):
        self.bar = 10

class FooBar(Foo, Bar):
    def __init__(self):
        print "foobar init"
        super(FooBar, self).__init__()
a = FooBar()
print a.foo
print a.bar

在多重继承中,只有第一类init方法被调用。 有没有办法在多个继承中调用所有init方法,所以我可以访问所有类实例变量

输出

foobar init
20
Traceback (most recent call last):
File "a.py", line 16, in <module>
    print a.bar
AttributeError: 'FooBar' object has no attribute 'bar'

无法访问类变量栏

1 个答案:

答案 0 :(得分:1)

class Foo(object):
def __init__(self):
    super(Foo,self).__init__()
    self.foo = 20

class Bar(object):
def __init__(self):
    super(Bar,self).__init__()
    self.bar = 10


class FooBar(Bar,Foo):
def __init__(self):
    print "foobar init"
    super(FooBar,self).__init__()



a = FooBar()
print a.foo
print a.bar

super()调用在每一步中找到MRO(方法解析顺序)中的/ next方法/,这就是为什么Foo和Bar也必须拥有它,否则执行会在Bar的末尾停止。初始化