Подтвердить что ты не робот

Вызов родительского родительского метода, который был переопределен родительским

Как вы называете метод более одного класса цепочкой наследования, если он был переопределен другим классом на этом пути?

class Grandfather(object):
    def __init__(self):
        pass

    def do_thing(self):
        # stuff

class Father(Grandfather):
    def __init__(self):
        super(Father, self).__init__()

    def do_thing(self):
        # stuff different than Grandfather stuff

class Son(Father):
    def __init__(self):
        super(Son, self).__init__()

    def do_thing(self):
        # how to be like Grandfather?
4b9b3361

Ответ 1

Если вы всегда хотите Grandfather#do_thing, независимо от того, есть ли Grandfather Father немедленный суперкласс, вы можете явно вызвать Grandfather#do_thing в объекте Son self:

class Son(Father):
    # ... snip ...
    def do_thing(self):
        Grandfather.do_thing(self)

С другой стороны, если вы хотите вызвать метод do_thing суперкласса Father, независимо от того, является ли он Grandfather, вы должны использовать super (как в ответе Тьерри):

class Son(Father):
    # ... snip ...
    def do_thing(self):
        super(Father, self).do_thing()

Ответ 2

Вы можете сделать это, используя:

class Son(Father):
    def __init__(self):
        super(Son, self).__init__()

    def do_thing(self):
        super(Father, self).do_thing()