Mam klasę reprezentującą coś z kilku pól. Kiedy lista wystąpień tej klasy jest posortowana, chcę, aby były posortowane w określonej kolejności (uzyskaj konkretny klucz z każdego z nich). Mogę po prostu zrobić list.sort(key=Classname.sortKey)
i zdefiniować metodę sortKey
, ale wolę po prostu zrobić list.sort()
i to działa. Myślę, że mogę to zrobić, przesyłając __cmp__
. Co jednak mam zrobić, gdy porównuję coś, co nie jest moim typem danych? Wydaje mi się, że ...jak ustawić sortowalny typ danych w Pythonie?
def __cmp__(self, o):
if isinstance(o, MyClass):
return cmp(self.sortKey(), o.sortKey())
return object.__cmp__(self, o) ##**wrong
ale to działa zamiast tego. Nie obchodzi mnie, jakie zamawianie biorą na heterogenicznej liście. Chciałbym tylko zwrócić 0
, ale rzeczy takie jak MyClass(...) == x
jest zawsze prawdziwe, dla każdego x
nie instancji MyClass
.