Python-Initialisierung mit MehrfachvererbungPython

Python-Programme
Guest
 Python-Initialisierung mit Mehrfachvererbung

Post by Guest »

Ich habe die folgende Klassenhierarchie. Das Ziel besteht darin, dass der aufrufende Code entweder ein Basis-Foo-Objekt oder ein Foobar-Objekt auswählt, das auch die zusätzliche Bar-Funktionalität bereitstellt.

Code: Select all

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)
Aber wenn ich versuche, es auszuführen:

Code: Select all

>>> fb = Foobar()
AttributeError: 'Foobar' object has no attribute 'foo'
Wie initialisiert man Foobar richtig? Ich habe eine Reihe von Artikeln und SO-Beiträgen über die Initialisierung mit Mehrfachvererbung gelesen, aber keinen, in dem ein Basiskonstruktor eine Eigenschaft der anderen Basisklasse erfordert.
BEARBEITEN:Mein tatsächlicher Anwendungsfall ist abgeleitet von https://www.pythonguis.com/tutorials/py ... atplotlib/. "

Code: Select all

Bar
" ist eigentlich FigureCanvasQTAgg und "

Code: Select all

Foobar
" entspricht MplCanvas. Foobar muss von FigureCanvasQTAgg abgeleitet sein, da das Foobar-Objekt an eine Reihe von PySide6-Code übergeben wird, der Attribute verwendet, die ich nicht verwende Ich versuche, den regulären matplotlib-Code in eine andere Basisklasse aufzuteilen (

Code: Select all

Foo
), damit ich ein alternatives Frontend erstellen kann, das PySide6 nicht verwendet, aber es gibt möglicherweise einen anderen Weg, dieses Ziel zu erreichen.
BEARBEITEN 2:
Sieht so aus, als ob der gesamte Ansatz fehlerhaft sein könnte. Es wäre für mein kleines Gehirn sicherlich weniger anstrengend, foo in einer separaten Funktion zu erstellen, bevor ich versuche, entweder ein Foo oder eine Foobar zu instanziieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post