[Python-de] super() vs. self.__class__

Martin v. Loewis martin at v.loewis.de
Thu Sep 5 20:10:05 EDT 2002


Rainer Fischbach <fischbach at ecs-gmbh.de> writes:

> d. h. in der Methode hi der Klasse X führt
> 
> super (X, self).hi ('X')
> 
> effektiv zum Aufruf der Methode hi aus Y, also einer Methode, die X
> überhaupt nicht erbt! 

Dieses Feature ist inzwischen unter dem Namen "cooperative superclass
method" bekannt, und wurde ursprünglich wohl in

Ira R. Forman, Scott H. Danforth. Putting Metaclasses to Work: A New
Dimension in Object-Oriented Programming

vorgeschlagen.

> Wenn ich super benutze, muss ich damit rechnen, eine Methode aus
> einer Klasse aufzurufen, die ich nicht sehe und möglicherweise
> destruktive Effekte auf den Objektzustand haben kann (z. B. durch
> Namenskonflikte von Attributen, Verletzung von Bedingungen etc.)

All das kann auch passieren, wenn Du eine Methode einer Basisklasse
rufst, die Du siehst.

> Das widerspricht ganz eindeutig den Prinzipien des oo Softwaredesigns, wie
> z. B. dem der modularen Verständlichkeit von Code auf der Basis der lokalen
> Einheit 

Tut es nicht: Es verwirklicht das Prinzip modularen Codes auf der
Basis der lokalen Einheit. Jede Implementierung einer kooperativen
Methode trägt ihr Scherflein zum Gesamtverhalten bei.

Eventuell kann man Methoden nicht kooperativ realisieren. Das geht
nur, wenn man für jede Komponente Pre- und Post-Bedingungen
formulieren kann. Für "save" funktioniert das recht gut.

> Ich hab langsam das Gefühl, dass der Featurismus, der sich in den letzten
> Python-Releases breitmacht, zu einem Durcheinander von ad-hoc-Lösungen
> führt, deren Konsequenz niemend mehr richtig durchschaut.

Kooperative Methoden sind durchaus nicht ad-hoc, sondern
wissenschaftlich fundiert und in der Literatur belegt.

Ciao,
Martin




More information about the Python-de mailing list