Проблема с множественным наследование в Python 3.6
class classColumn:
def __init__(self):
self.m = 0.5
self.a = 800 * self.m
self.b = 500 * self.m
self.tp = 190 * self.m
self.x = 400
self.y = 400
super().__init__()
class Line:
def __init__(self):
self.ve=3
print ("line")
class Moment_W(Line, classColumn):
def __init__(self):
super().__init__()
a=4+self.a
print ("moment")
print(self.ve)
print(self.x)
#d=classColumn()
p=Moment_W()
В данном коде наследования атрибутов из ClassColumn не происходит. Вопрос, что я делаю не так? Я до этого пробовал очень похожий код. Немного другие имена переменных все работало. А тут голову сломал? может опечатка какая то я ее не вижу?
Ответы (1 шт):
У обоих классов, от которых Вы наследуетесь, есть метод __init__. Чтобы не возникало вопросов, какой метод должна вызвать инструкция super().__init__(), придуманы алгоритмы разрешения порядка наследования.
В Python используется алгоритм MRO С3.
По этому алгоритму super().__init__() вызовет конструктор класса Line, и атрибут self.a не будет инициализирован, поэтому и возникает ошибка.
Вам нужно либо изменить порядок наследования, либо изменить сам конструктор.
Вы можете посмотреть полный порядок наследования с помощью метода mro:
print(Moment_W.mro())
[<class '__main__.Moment_W'>, <class '__main__.Line'>, <class '__main__.classColumn'>, <class 'object'>]