Guido, der ursprüngliche Autor von Python, erklärt das Überschreiben von Methoden wie folgt: "Abgeleitete Klassen können Methoden ihrer Basisklassen außer Kraft setzen. Da Methoden keine besonderen Privilegien haben, wenn sie andere Methoden desselben Objekts aufrufen, kann eine Methode einer Basisklasse, die eine andere in derselben Basisklasse definierte Methode aufruft, am Ende tatsächlich eine Methode einer abgeleiteten Klasse aufrufen, die sie außer Kraft setzt. (Für C++-Programmierer: Alle Methoden in Python sind praktisch virtuell.)" Wenn das für Sie keinen Sinn ergibt (mich verwirrt es gewaltig), können Sie es gerne ignorieren. Ich dachte nur, ich würde es weitergeben.
Ich versuche, ein Beispiel für zu finden: eine Methode einer Basisklasse, die eine andere in derselben Basisklasse definierte Methode aufruft, kann in der Tat eine Methode einer abgeleiteten Klasse aufrufen, die diese überschreibt
class A:
def foo(self): print 'A.foo'
def bar(self): self.foo()
class B(A):
def foo(self): print 'B.foo'
if __name__ == '__main__':
a = A()
a.bar() # echoes A.foo
b = B()
b.bar() # echoes B.foo
... aber beides scheint ziemlich offensichtlich zu sein.
Habe ich etwas übersehen, das in dem Zitat angedeutet wurde?
UPDATE
bearbeiteter Tippfehler von calling a.foo()
(anstelle von a.bar()
)und b.foo()
(anstelle von b.bar()
) im ursprünglichen Code
0 Stimmen
Schmutziger Hack, um an die Eltern heranzukommen
b.__class__.__mro__[1].hi(A())
0 Stimmen
@Jakob: warum nicht
super
?0 Stimmen
@Eli Gibt NULL auf python2.6.6 zurück ? :S