2011-01-07 5 views
8

Ich habe eine Klasse, die etwas mit ein paar Feldern darstellt. Wenn eine Liste von Instanzen dieser Klasse sortiert ist, möchte ich, dass sie in einer bestimmten Reihenfolge sortiert werden (erhalten Sie jeweils einen bestimmten Schlüssel). Ich kann einfach list.sort(key=Classname.sortKey) tun und eine sortKey Methode definieren, aber ich würde lieber nur tun list.sort() und es funktioniert. Ich denke, ich kann dies durch Überschreiben __cmp__ tun. Was mache ich jedoch, wenn ich mit etwas vergleiche, das nicht mein Datentyp ist? Ich sehe etwas wie ...Wie sortierbarer Datentyp in Python zu machen?

def __cmp__(self, o): 
    if isinstance(o, MyClass): 
     return cmp(self.sortKey(), o.sortKey()) 
    return object.__cmp__(self, o) ##**wrong 

aber das funktioniert stattdessen. Es ist mir egal, welche Reihenfolge sie in einer heterogenen Liste einnehmen. Ich würde einfach 0 zurückgeben, aber dann Zeug wie MyClass(...) == x ist immer wahr, für alle x keine Instanz von MyClass.

Antwort

Verwandte Themen