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



在模块 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'

无法访问柱类变量柱

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.init结束时停止。

相关内容

  • 没有找到相关文章

最新更新