В принципе, проблема у меня спрашивает here и есть некоторые ответы, как показано ниже, где Son
делают некоторые вещи, как Father
(инициализации в данном случае) и некоторые другие вещи, как GrandFather
(do_thing
).Вызов метода родителя-родителя, какие-либо последствия?
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):
super(Father, self).do_thing() # <-- this line bypasses Father's implementation
Что я интересно, если есть какие-либо последствия для вызова super
подобное (последняя строка выше), то есть, передавая тип класса, кроме ваших собственных. Я имею в виду что-то вроде вашего кода, разбивающегося в какой-то странной точке, где вы этого не ожидаете.
Что еще не покрыто [здесь] (http://stackoverflow.com/questions/5033903/python-super-method-and-calling-alternatives), [здесь] (http://stackoverflow.com/questions/222877/what-do-super-do-in-python) или [здесь] (http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods)? –
@StephenRauch, что не покрыто? Мой вопрос не распространяется! : D Обратите внимание, что последняя строка в моем примере читает 'super (Father, self)', а не 'super (Son, self)'. Последний является обычным способом использования 'super', и это описано в ссылках, которые вы предоставили. Мой вопрос, однако, о первом, где я обходит прямой родительский класс и называю метод в классе grandparent! – Mahdi