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

Как правильно вызвать методы базового класса (и конструктор) из унаследованных классов в 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
   ...

Правильно ли это?

Спасибо, Бода Сидо.

4b9b3361

Ответ 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
   ...