2016-10-05 7 views
0

Я пытаюсь понять порядок разрешения метода в несколько раз. Вот код, который я использую. Когда я пытаюсь создать объект класса «ClassC», получает вызов только конструктор класса A. Как разрешаются в этом случае методы?Разрешение метода при множественном наследовании в Python

class ClassA: 
    def __init__(self): 
     print "inside a's init" 

class ClassB: 
    def __init__(self): 
     print "inside b's init" 

class ClassC(ClassA,ClassB): 
    pass 

c = ClassC() 

Выход:

inside a's init 
+0

Вы должны использовать классы нового стиля в Python 2, например 'class ClassA (object):' (в Python 3 все классы являются новыми). А затем добавьте 'super (ClassA, self) .__ init __()' в '.__ init__' метод' ClassA'. (Вы также можете добавить аналогичный вызов в класс ClassB, но это не обязательно, потому что 'ClassB' - это конец цепочки наследования класса ClassC. Если ответ на ядро ​​Python Raymond Hettinger в связанном вопросе не полностью отвечает на ваш вопрос, пожалуйста, дайте мне знать. –

+0

Это было полезно @ PM2Ring. Спасибо – Heisenberg

ответ

0

Существует питон PEP Я считаю, что охватывает алгоритм MRO в деталях, но это довольно сложный. Кроме того, это описано в книге Fluent Python. Я считаю, что новелла является то, что она идет слева направо

если вы переключитесь на

class ClassC(ClassB,ClassA): 
    pass 

Я уверен, вы бы увидеть изменения. (Обновление, вы обязательно увидите изменения)

Кроме того, если вы звоните

help(c) 

вы должны увидеть MRO распечатаны.

+0

Да. Это сработало. Но мой случай использования немного отличается от того, как просто называть конструктор второго класса. Решить его. Спасибо! – Heisenberg

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