[Python-de] auf Liste testen

Diez B. Roggisch deets at web.de
Fre Dez 16 12:35:17 CET 2005


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