Ich habe gerade etwas mit Mehrfachvererbung in Python versucht. Ich komme mit diesemPython mehrfache Vererbung, Aufruf Basisklasse Funktion
class ParentOne:
def foo(self):
print("ParentOne foo is called")
class ParentTwo:
def foo(self):
print("ParentTwo foo is called")
class Child(ParentOne, ParentTwo):
# how is this working
def call_parent_two_foo(self):
super(ParentOne, self).foo()
# This does not work
def call_parent_foo(self):
super(ParentTwo, self).foo()
def call_super_foo(self):
super(Child, self).foo()
def foo(self):
print("Child foo is called")
if __name__ == "__main__":
child = Child()
child.foo()
child.call_super_foo()
child.call_parent_two_foo()
# child.call_parent_foo() #This gives the below error
# super(ParentTwo, self).foo()
# AttributeError: 'super' object has no attribute 'foo'
und es gibt die folgende Ausgabe
Child foo is called
ParentOne foo is called
ParentTwo foo is called
ich verwirrt bin immer wie Aufruf von super(ParentOne, self).foo()
in diesem Fall ausgewertet wird. Nach meinem Verständnis ParentOne
Klasse hat keine Ahnung von den Methoden und Eigenschaften von ParentTwo
Klasse. Wie funktioniert Super bei Mehrfachvererbung?
Gibt es einen Weg, um zu sehen/bekommen MRO –
@AnuragSharma - 'inspect.getmro' es dir geben sollte. IIRC, können Sie auch über das magische Attribut "__mro__" darauf zugreifen. – mgilson