[Python-de] auf Liste testen

Stefan Behnel behnel_ml at gkec.informatik.tu-darmstadt.de
Fre Dez 16 13:09:31 CET 2005


Diez B. Roggisch schrieb:
> Die Pruefung erfolgt dabei eben implizit, durch Anwendung seiner benoetigten 
> Operationne - und genau das verstehe ich unter Duck-Typing.

Wie sagt man doch so schön?

We're all adults.


>> Ich halte mich an folgende Regeln:
>> 1.) Ich verwende type() wenn moeglich oder zwingend notwendig.
>> 2.) Ich verwende isinstance() wenn type() nicht geht (wg. Ableitungen).

Was sicherlich so oft der Fall ist, dass type() ernsthaft Seltenheitscharakter
verdient. Warum sollte ich mir meinen Code kaputt machen, nur, weil ich später
irgendwann auf die Idee komme, dass ich eine Subklasse brauche, die irgendwas
macht, was das Original nicht konnte? Ist für mich eigentlich Teil des Sinns
und Zwecks von OO.

Und das trifft insbesondere auf die Standardklassen zu: Mappings, Sequenzen,
Iterables, Files, Zeichenfolgen, ...


>> 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 -

Dem schließe ich mich an.

Stefan