Я просто погружаюсь в некоторые более продвинутые темы python (ну, по крайней мере, продвинулся ко мне). Теперь я читаю о множественном наследовании и о том, как вы можете использовать super(). Я более или менее понимаю, как используется суперфункция, но (1) Что не так с этим просто:?:
class First(object):
def __init__(self):
print "first"
class Second(object):
def __init__(self):
print "second"
class Third(First, Second):
def __init__(self):
First.__init__(self)
Second.__init__(self)
print "that it"
В супер(), Статья Андрея Кучлинга о бородах на питоне говорит:
использование super() также будет правильным, если класс Derived наследует из нескольких базовых классов, а некоторые или все из них имеют initМетоды
Итак, я переписал приведенный выше пример следующим образом:
class First(object):
def __init__(self):
print "first"
class Second(object):
def __init__(self):
print "second"
class Third(First, Second):
def __init__(self):
super(Third, self).__init__(self)
print "that it"
Тем не менее, он запускает только первый init, который находится в First
. (2) Можно использовать super()
для запуска как init из First
, так и Second
, и если да, то как? Запуск super(Third, self).__init__(self)
дважды запускается сначала. init() дважды.
Чтобы добавить еще одну путаницу. Что делать, если функции унаследованных классов init() принимают разные аргументы. Например, что, если бы у меня было что-то вроде этого:
class First(object):
def __init__(self, x):
print "first"
class Second(object):
def __init__(self, y, z):
print "second"
class Third(First, Second):
def __init__(self, x, y, z):
First.__init__(self, x)
Second.__init__(self, y, z)
print "that it"
(3) Как я могу предоставить соответствующие аргументы для различных функций инициализации наследуемых классов с помощью функции super()?
Все советы приветствуются!
пс. Поскольку у меня есть несколько вопросов, я сделал их жирным шрифтом и пронумеровал их.