[Python-de] Fehlerausgabe bei eigenen Modulen/Bibliotheken

Hartmut Goebel h.goebel at goebel-consult.de
Fr Aug 6 08:21:23 UTC 2010


Hallo,

Am 05.08.2010 22:10, schrieb Sebastian Bechtel:

> für mich als Python Neuling hat sich genau die selbe Frage auch gestellt. Deshalb
> möchte ich mal meine These vorstellen, warum es "pythonisch" ist,
keine Type
> Checks zu machen ;-)
[...]
> Nun ist in Python alles etwas flexibler und Interfaces und abstrakte Klassen
> gibt es nicht (oder ich habe sie zumindest so direkt noch nicht gefunden).
[...]
> Allerdings nun auf einzelne Klassen zu prüfen wäre der falsche Weg, in
> anderen Sprachen würde man es ja auch nicht machen.

Die Typechecks muss man ja auch nicht selbst machen, das macht ja Python
für einen, wenn es nötig ist.

Anderer Programmiersprachen haben "Interfaces" und man kann/muss testen,
ob einen Klasse dieses Interface implementiert. In Python spart man sich
das und macht statt dessen "duck-typing"
<http://de.wikipedia.org/wiki/Duck-Typing>.

Das funktioniert grob so: Wenn ich ein Element an ein "Liste"-Objekt
anhängen will, also eigentlich Elemente sammeln will, dann muss die
"Liste" dafür ja nur die Methode "append()" unterstützen. Wenn ein
Objekt übergeben wird, das append nicht kann, dann fällt das beim Testen
auf.

Die Philosophie ist die: Warum bei 100% der Objekte prüfen, ob sie eine
bestimmte Klasse haben oder ein bestimmtes Interface implementieren,
wenn doe (negative) Prüfung nur bei 0,0001% relevant ist? Da ist es
billiger (aka schneller) im Fehlerfall zu schreien.

[Bei einer statisch typisierten Sprach wie Java sind solche Tests eher
sinnvoll. Dann da kann der Compiler zur Übersetzungszeit prüfen.]

Abstrakte Klassen sind einfach Klassen, bei denen nicht alle Methoden
implementiert sind. Da Python keine Interfaces kennt, mache ich das
üblicherweise so:

class X:
   def tu_was(self, was, das, nocheines):
      raise NotImplementedError

Ab Python 2.6 gibt es auch das Modul `abc`, mit dem man Abstract Base
Classes entsprechend markieren kann.
<http://docs.python.org/library/abc.html>

-- 
Schönen Gruß - Regards
Hartmut Goebel
Dipl.-Informatiker (univ.), CISSP, CSSLP

Goebel Consult
Spezialist für IT-Sicherheit in komplexen Umgebungen
http://www.goebel-consult.de

Monatliche Kolumne: http://www.cissp-gefluester.de/
Goebel Consult mit Mitglied bei http://www.7-it.de

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/pkcs7-signature
Dateigröße  : 4732 bytes
Beschreibung: S/MIME Cryptographic Signature
URL         : <http://python.net/pipermail/python-de/attachments/20100806/d4b8deba/attachment.bin>


Mehr Informationen über die Mailingliste python-de