Как правильно вызвать методы базового класса (и конструктор) из унаследованных классов в Python?
Предположим, что у меня есть класс Base
и класс Child
, который наследуется от Base
. Каков правильный способ вызова конструктора базового класса из дочернего класса в Python? Использовать ли я super
?
Вот пример того, что у меня есть до сих пор:
class Base(object):
def __init__(self, value):
self.value = value
...
class Child(Base):
def __init__(self, something_else):
super(Child, self).__init__(value=20)
self.something_else = something_else
...
Правильно ли это?
Спасибо, Бода Сидо.
Ответы
Ответ 1
Это правильно. Обратите внимание, что вы также можете вызвать метод __init__
непосредственно в классе Base
, например:
class Child(Base):
def __init__(self, something_else):
Base.__init__(self, value = 20)
self.something_else = something_else
То, как я обычно это делаю. Но он обескуражен, потому что он не очень хорошо себя ведет при наличии множественного наследования. Конечно, множественное наследование имеет всевозможные нечетные эффекты, и поэтому я избегаю этого, как чума.
В общем случае, если классы, которые вы наследуете от использования super
, вам также нужно.
Ответ 2
Если вы используете Python 3.1, супер является новым и улучшенным. Он вычисляет аргументы класса и экземпляра для вас. Поэтому вы должны называть супер без аргументов:
class Child(Base):
def __init__(self, value, something_else):
super().__init__(value)
self.something_else = something_else
...
Ответ 3
Да, это правильно. Если вы хотите пройти value
в класс Child
, вы могли бы сделать это таким образом
class Child(Base):
def __init__(self, value, something_else):
super(Child, self).__init__(value)
self.something_else = something_else
...