У меня есть следующая иерархия классов. Цель состоит в том, чтобы вызывающий код выбрал либо базовый объект Foo, либо объект Foobar, который также предоставляет дополнительную функциональность Bar.
Код: Выделить всё
class Foo:
def __init__(self):
self.foo = 'foo'
class Bar:
def __init__(self, attr):
self.attr = attr
def bar(self):
print(self.attr + 'bar')
class Foobar(Foo, Bar):
def __init__(self):
super().__init__(self.foo)
Но когда я пытаюсь его запустить:
Код: Выделить всё
>>> fb = Foobar()
AttributeError: 'Foobar' object has no attribute 'foo'
Как правильно инициализировать Foobar? Я прочитал ряд статей и сообщений SO об инициализации с множественным наследованием, но ни в одной из них не было случая, когда один базовый конструктор требует свойства другого базового класса.
EDIT:Мой фактический вариант использования взят из
https://www.pythonguis.com/tutorials/py ... atplotlib/. "
" на самом деле является РисунокCanvasQTAgg и "
" соответствует MplCanvas. Foobar должен быть производным от PictureCanvasQTAgg, потому что объект Foobar будет передан группе кода PySide6, который использует атрибуты, которые мне не нужны. знаю. Я пытаюсь разбить обычный код matplotlib на другой базовый класс (
), чтобы я мог создать альтернативный интерфейс, не использующий PySide6, но может быть другой способ достижения этой цели.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... nheritance