Der Einfachheit halber sagen wir, ich habe eine Person-Klasse in Python. Diese Klasse hat Felder für Vorname, Nachname und Dob.Pythonic Vergleichsfunktionen
In einigen Situationen möchte ich Listen von Personen nach Nachnamen sortieren, gefolgt von Vorname gefolgt von DOB. In anderen Situationen möchte ich zuerst nach dob, dann nach lastname und schließlich nach vorname sortieren. Und manchmal möchte ich nur nach Vornamen sortieren.
Die naive Lösung für die erste Vergleichsfunktion zu schaffen wäre so etwas wie diese:
def comparepeople(person1, person2):
if cmp(person1.lastname, person2.lastname) == 0:
if cmp(person1.firstname, person2.firstname) == 0:
return cmp(person1.dob, person2.dob);
return cmp(person1.firstname, person2.firstname);
return cmp(person1.lastname, person2.lastname);
Es scheinen würde, wie sollte es eine einfache Möglichkeit, zu Vergleichsfunktionen wie diese mit Hilfe eines Meta-Programmierung Ansatz, bei dem alle definieren Ich müsste die Feldnamen in der Reihenfolge ihrer Priorität angeben, anstatt diese sehr ausführlichen, hässlichen Vergleichsmethoden zu schreiben. Aber ich habe erst kürzlich angefangen, mit Python zu spielen und habe nichts gefunden, was ich beschrieben habe.
Die Frage ist also, was ist der pythonischste Weg, eine Vergleichsfunktion für eine Klasse mit mehreren vergleichbaren Bestandteilen zu schreiben?
Als beiseite - entfernen diese Semikolons! Sie spielen keinen nützlichen Zweck und sind kein guter Python-Stil. –