Gibt es eine Möglichkeit, ein Python-Objekt zu erstellen, das nicht sortierbar ist? Also wird das eine Ausnahme sein, wenn man versucht, eine Liste dieser Objekte zu sortieren? Ich habe eine sehr einfache Klasse erstellt, keine Vergleichsmethoden definiert, aber Instanzen dieser Klasse sind vergleichbar und damit sortierbar. Vielleicht erbt meine Klasse Vergleichsmethoden von irgendwo. Aber ich will dieses Verhalten nicht.
Sie könnten eine __cmp__
-Methode für die Klasse definieren und beim Aufruf immer eine Ausnahme auslösen. Das könnte den Trick machen.
Aus Neugier, warum?
Wie Will McCutchen erwähnt hat, können Sie eine __cmp__
-Methode definieren, die eine Ausnahme auslöst, um die Sortierung von Gartensorten zu verhindern. Etwas wie das:
Sie können jedoch nicht wirklich verhindern, dass ein Entwickler eine Liste Ihrer Objekte sortiert. Mit dem Argument key
oder cmp
mit list.sort()
oder mit der integrierten Standalone-Funktion sorted()
kann jeder die Methode __cmp__
umgehen, indem er eine benutzerdefinierte Vergleichsfunktion oder einen Sortierschlüssel verwendet.
Wie andere betonen werden, bin ich mir nicht sicher, ob es viel Wert ist, jemanden daran zu hindern, ein Objekt zu sortieren. Wenn das nicht nur ein merkwürdiges Problem ist, das Sie versuchen zu kratzen, was ist der Anwendungsfall dafür?
Die Standardsortierung der Liste verwendet die integrierte Funktion cmp()
für ihre Elemente. Die Funktion cmp()
überprüft, ob ihre Argumente (2 Elemente aus Ihrer Liste) eine __cmp__()
-Methode haben. Wenn ja, wird diese Methode zum Vergleich verwendet. Ansonsten werden wie in Ihrem Fall die Argument-Objekt-IDs (Rückgabewert der eingebauten Funktion id()
) zum Vergleich verwendet.
Um die Sortierung fehlschlagen zu lassen, könnten Sie eine Vergleichsmethode definieren, die eine Ausnahme auslöst:
%Vor% Was es wert ist, ist in Python 3 der Standardwert, dass neue Objekte nicht vergleichbar (und daher nicht sortierbar) sind. In Python 2 müssen Sie explizit eine __cmp__
oder __lt__
Methode erstellen, wie andere gesagt haben.
Mengen haben keine Gesamtordnung
%Vor%Aber keine Ausnahme wird ausgelöst, wenn Sie versuchen, sie zu sortieren
%Vor%Tags und Links python