
On Friday 16 December 2005 11:51, Ulrich Berning wrote:
Duck-Typing bedeutet keinesfalls, dass man einfach Operationen auf einem Objekt ausfuehrt, ohne zu pruefen, ob das Objekt diese Operationen auch zur Verfuegung stellt. Duck-Typing bedeutet lediglich, dass man nicht den Typ eines Objektes erfragt, um vom Typ des Objektes auf die implementierte Schnittstelle zu schliessen, sondern man prueft stattdessen, ob das Objekt die benoetigte Schnittstelle implementiert. Die Betonung liegt auf pruefen.
Stimmt das? Wenn ich zB (c)StringIO hernehme - dann kann ich das ueberall da reingeben wo der Autor eines anderen Paketes files angedacht hat. Und genau darum geht es doch: er (der andere Autor) wird doch nicht hingehen und alle eventualitaeten pruefen, sondern eben einfach das machen, was er mit dem vermeintlichen Stream anfangen wollte. Die Pruefung erfolgt dabei eben implizit, durch Anwendung seiner benoetigten Operationne - und genau das verstehe ich unter Duck-Typing. Um bei Alex' Beispiel zu bleiben:
"In other words, don't check whether it IS-a duck: check whether it QUACKS-like-a duck, WALKS-like-a duck, etc, etc, depending on exactly what subset of duck-like behaviour you need to play your language-games with."
some_bird.quack() some_bird.walk() statt try: some_bird.quack some_bird.walk except AttributeError: print "I want a duck!" raise Letzteres ist das, was ich deiner Aussage entnehme und dem angehangenen Skript.
Ich halte mich an folgende Reeln: 1.) Ich verwende type() wenn moeglich oder zwingend notwendig. 2.) Ich verwende isinstance() wenn type() nicht geht (wg. Ableitungen). 3.) Duck-Typing kommt nur dann zur Anwendung, wenn ich vom Typ eines Objektes nicht auf seine implemetierte Schnittstelle schliessen kann, z. B. wenn die Schnittstelle eines Objektes zur Laufzeit erzeugt oder veraendert wird. 4.) Try-And-Error vermeide ich moeglichst immer.
Mit Ausnahme von 3 - da haben wir wohl etwas divergierende Vorstellungen - sehe ich das genauso. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de