[Python-de] Typ-Prüfung
Gerhard Häring
gh at ghaering.de
Mit Sep 17 15:14:20 CEST 2003
Lutz Schröer wrote:
> [...]
> def isString(s):
> try: s += ' '
> except: return 0
> else: return 1
>
> Wie kann ich das auch ohne Exception lösen? Im Kochbuch wird auch
> folgende Variante angeboten:
>
> def isString(s):
> return isinstance(s, type(''))
Das type('') ist wg. Kompatibilität mit antiken (< 2.2)
Python-Versionen. Falls auch Unicode-Strings für dich Strings sind, ist
mein Test ab Python 2.3:
isinstance(s, basestring)
und wenn 2.2 unterstützt werden soll:
isinstance(s, (str, unicode))
Aber wenn ich ehrlich sein soll, finde ich deinen Ansatz prinzipiell
b0rken. Da es in Python keine Methodenüberladung anhand der
Parametertypen gibt (wie heisst der Fachbegriff noch mal?), würde ich
einfach *zwei* Methoden schreiben. Eine für einen String, eine für eine
Liste.
> Das funktioniert aber erst ab Python 2.0 und auch nicht mit Unicode.
> Da es sich um ein Modul handelt, das ich veröffentlichen will, sollte
> es möglichst universell, am besten Version-1.5- kompatibel und kein
> Code-Monster sein (ich will's wenigstens selber noch verstehen).
Unicode-Unterstützung und 1.5.2-Kompatibilität zusammen. Viel Spass.
> Wobei sich mir auch gerade die Frage stellt, ob man beim Erstellen
> von Modulen noch auf die Version 1.5 Rücksicht nehmen sollte (und wie
> lange noch) oder eine andere Version (welche?) als allgemein vorrätig
> und benutzt vorraussetzen kann?
Wenn ich was als Open Source veröffentliche, mache ich dass weil mir die
Entwicklung Spass macht. Und alles < 2.2 ist für mich kein Spass :-/ Und
was mir nicht Spass macht, mache ich nur gegen Geld, denn das nennt sich
dann Arbeit ;-)
Ich setzte bei meinem Zeug schon lange mindestens 2.1 voraus und in den
nächsten Major-Releases meiner Datenbank-Module 2.2.
Ich leiste gern meinen Beitrag dazu, Leute zum Upgrade von Python zu
bewegen :-D
-- Gerhard