[Python-de] types.SetType

Dinu Gherman gherman at darwin.in-berlin.de
So Feb 11 12:20:13 CET 2007


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