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
.