Конструктор B не вызывается в цепочке наследования A -> B -> C - PullRequest
2 голосов
/ 16 марта 2011

У меня есть следующая цепочка наследования:

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 выдается:

Баз

Foo

Почему конструктор Бара не вызывается?

1 Ответ

9 голосов
/ 16 марта 2011

Вызов 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__()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...