[Python-de] super()

Martin v. Loewis martin at v.loewis.de
Wed Sep 4 22:57:06 EDT 2002


Thomas Fanslau <tfanslau at gmx.de> writes:

> Kann eigentlich so nicht funktionieren. 

Tut es aber.

> Wo bekommt den 'B' die 'save_next'-Methode her?

Von self. Probier' einfach mal

d = D()
d.save()

aus. In B ist self.save_next eben A.save_next, wenn self vom Typ D
ist.

> Und was noch wichtiger ist A.save() wird so gar nicht aufgerufen,
> denn selbst wenn save_next() bekannt wäre, wird beim Einsatz von
> super() nur D(B,A) die ERSTE save()-Funktion aufgerufen!

Doch, wird es. Probier's aus.

> Ich glaube du hast übersehen, das die Vererbung A(object), B(object),
> D(B,A) lautet.

Ich habe den Code getestet genau so, wie ich ihn gepostet habe. Es
funktioniert wirklich.

> Und mit deiner Lösung handelst du dir auch nur Probleme ein, wenn die
> Vererbung A(object), B(A), C(A), D(B,C) lautet, weil dann in letzten
> Falle save() für A zweimal aufgerufen wird. Im 'Python Cookbook' ist
> deine Lösung unter 5.3 zu finden.

Nein, A.save wird nur einmal gerufen. Probier's aus.

> Aber was dort fehlt ist, der Hinweis, die bereits aufgerufenen Klassen
> in ein Dictionary einzutragen und so zu versuchen zu verhindern, das
> sie nochmal aufgerufen werden.

super ist genau dazu gut, das zu vermeiden.

Ciao,
Martin




More information about the Python-de mailing list