So, jetzt aber im richtigen Thema...
Craven hat geschrieben:Wenn einer Verbesserungsvorschläge hat, immer her damit.

Aber gerne doch!
Das hier ist mit Sicherheit nicht richtig:
Zudem braucht es hier wirklich keine Klasse (auch wenn man sich manchmal merkwürdig dazu gedrängt fühlt). Es ist vollkommen ausreichend, hier nur Funktionen zu verwenden. Dadurch fallen eine Einrücktiefe und diverse `self`s weg, was die Lesbarkeit verbessert. Als Modul `ed2k` hat es bereits einen Namespace, wenn man es importiert, daher ist auch deshalb die Klasse nicht sinnvoll (in der dunklen PHP-Welt sieht das anders aus, aber hier scheint die Sonne).
Hier wird ein Wahrheitswert erwartet, der vom Vergleichsoperator geliefert wird. Allerdings geht diese Bedingung davon aus, dass `method` wahr oder falsch ist bzw. behandelt es einfach wie einen Wahrheitswert. Daher reicht dieser Code völlig:
Hier kann man Klammern zur besseren Lesbarkeit verwenden:
Würde hier zudem der Ungleich-Operator `!=` verwendet, könnte man den Teil `== 0` ähnlich dem vorigen Beispiel weglassen, da `0` zu `False` ausgewertet würde.
Mir persönlich hat es das mit Python 2.5 eingeführte `with`-Statement sehr angetan. Aus
Code: Alles auswählen
fp = file(filename, 'rb')
hasher = hashlib.new("md4")
hasher.update(fp.read())
fp.close()
würde dann
Code: Alles auswählen
# wird in 2.6 nicht mehr erforderlich
from __future__ import with_statement
with file(filename, 'rb') as fp:
hasher = hashlib.new("md4")
hasher.update(fp.read())
So ist sichergestellt, dass die Datei in jedem Fall wieder beim Verlassen des Blocks geschlossen wird.
Will man einen String zusammenfügen, sollte man die Teilstücke in eine Liste speichern und diese dann am Ende mit `''.join(string_parts)` auf einmal zusammenfügen. Da Strings keine Array-ähnlichen Typen, sondern atomar und immutable sind, müssen sie bei jedem `+=` neu angelegt werden, was sich in geringerer Performance widerspiegelt. Dazu gibt es hier im Forum auch mehrere Themen, die das näher beleuchten.
Ansonsten fällt meinem spitzfindigen Auge auf, dass deine Einrücktiefe und die Methodensignatur bei Keywords nicht den Empfehlungen von PEP 8 folgen. Auch solltest du einheitliche String-Delimiter (`'` oder `"`) verwenden und nicht abwechseln. Docstrings für die Funktionen wären natürlich auch schön.