在A - >中没有调用构造函数B. B - > C继承链

时间:2011-03-15 22:28:19

标签: python oop inheritance constructor

我有以下继承链:

class Foo(object):
    def __init__(self):
        print 'Foo'

class Bar(Foo):
    def __init__(self):
        print 'Bar'
        super(Foo, self).__init__()

class Baz(Bar):
    def __init__(self):
        print 'Baz'
        super(Bar, self).__init__()

实例化Baz类时,输出为:

  

巴兹

     

为什么没有调用Bar的构造函数?

1 个答案:

答案 0 :(得分:9)

super()的调用将当前类作为第一个参数,而不是超类(super()为其自身工作)。在这种情况下,以下内容应该修复它...请注意super()次调用的更改:

class Foo(object):
    def __init__(self):
        print 'Foo'

class Bar(Foo):
    def __init__(self):
        print 'Bar'
        super(Bar, self).__init__()

class Baz(Bar):
    def __init__(self):
        print 'Baz'
        super(Baz, self).__init__()