Why in Multiple Inheritance only one class init method get called
本问题已经有最佳答案,请猛点这里访问。
在模块中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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方法,以便访问所有类实例变量
输出:
1 2 3 4 5 6 | 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' |
无法访问bar类变量bar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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.in it结束时停止。