2011-01-07 14 views
8

Ho una classe che rappresenta qualcosa con alcuni campi. Quando viene ordinato un elenco di istanze di questa classe, desidero che vengano ordinate in un ordine particolare (ottenere una chiave particolare da ciascuna di esse). Posso solo fare list.sort(key=Classname.sortKey) e definire un metodo sortKey, ma preferisco semplicemente fare list.sort() e farlo funzionare. Immagino di poterlo fare ignorando lo __cmp__. Tuttavia, cosa faccio quando sto confrontando qualcosa che non è il mio tipo di dati? Immagino qualcosa di simile ...come creare un tipo di dati ordinabile in Python?

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

ma che funziona invece. Non m'importa di cosa ordinano in una lista eterogenea. Vorrei solo restituire 0 ma roba del tipo MyClass(...) == x è sempre vero, per qualsiasi non è un'istanza di MyClass.

risposta

Problemi correlati