2016-12-09 2 views
-1
class One(object): 
    def __init__(self, i = 0): 
     print('one', i) 

class Two(One): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('two', i) 

class First(object): 
    def __init__(self, i = 0): 
     print('first', i) 

class Second(First): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('second', i) 

class Third(Second, Two): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('third', i) 

class Fourth(Two, Second): 
    def __init__(self, i = 0): 
     super().__init__(i) 
     print('fourth', i) 

Выход:
Третий (3):
первые 3
второй 3
третий 3

Четвертый (4):
один 4
два 4
4th 4

Почему наследование не работает, как можно Я чиню это.
Спасибо за помощь.
Наследование не работает в питона кода

+6

Опишите вашу проблему. Уверяю вас, что наследование работает. – Carcigenicate

+0

Форматирование вашего кода является жестоким, использование '
' и ' ' не является способом его форматирования. Просто отступьте его четырьмя пробелами. –

+0

Пожалуйста, исправьте форматирование кода! Для этого в редактор сообщений есть инструменты. – Soviut

ответ

1

Вы должны вызвать super().__init__() в базовых классах One и First, чтобы соседние классы для инициализации.

class One(object): 
    def __init__(self, i = 0): 
     super().__init__() 
     print('one', i) 

.... 

class First(object): 
    def __init__(self, i = 0): 
     super().__init__() 
     print('first', i) 
.... 

>>> Fourth() 
first 0 
second 0 
one 0 
two 0 
fourth 0 
+0

Выход четвертого (4) не хорош, первый и второй все еще показывают 0, почему? – Jaswinder

+0

Если я передаю параметры в базовом классе, я получаю ошибку: TypeError: object .__ init __() не принимает параметров – Jaswinder

+0

, не зная вашего фактического использования, я абсолютно не могу вам помочь. Я бы порекомендовал вам попробовать передать имя текущего класса в качестве значения «i», чтобы увидеть цепочку цепочек вызовов init, но я не уверен, как вы планируете использовать такую ​​настройку в реальном коде. –

Смежные вопросы