Вызов родительского родительского метода, который был переопределен родительским
Как вы называете метод более одного класса цепочкой наследования, если он был переопределен другим классом на этом пути?
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?
Ответы
Ответ 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()