2011-01-07 13 views
8

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.

Odpowiedz