Martin v. Löwis:
Und ein dritter Versuch. Bei neuem Code solltest Du *weder*
if type(obj) == type(""):
schreiben, noch
if type(obj) == types.StringType:
*sondern*
if type(obj) == str
(u.U. auch
if isinstance(obj, str):
)
Ok, ich zaehle meine Versuche nicht so systematisch, aber vielleicht kommt es mit einem Beispiel meinerseits besser rueber. Was muesste ich also in den folgenden Zeilen fuer ??? einsetzen, um die gewuenschte Ausgabe zu bekommen? obj = NotImplemented if type(obj) == ???: print "verstanden" if isinstance(obj, ???): print "verstanden" Ich vermute, die Antwort lautet: ??? = type(NotImplemented). Und das ist eben nichts anderes als "frueher" bei Code wie: if type(obj) == type(""). Mit anderen Worten: woher bekomme ich das NotImplementedType, ohne type(NotImplemented) benutzen zu muessen? Antwort: aus dem Modul types. Wenn es keine andere Moeglichkeit gibt, ist das Modul nicht ueberfluessig. Wenn dem so ist und kein SetType/FrozenSetType drin ist, be- trachte ich das types-Modul als unvollstaendig, weil es einen uniformen Zugriff auf alle Typen ueber diese Variablen nicht mehr ermoeglicht. Ob das tragisch ist, sei dahingestellt, aber es ist nicht konsistent und nicht elegant. Gruss, Dinu