2011-01-07 11 views
8

Tengo una clase que representa algo con unos pocos campos. Cuando se ordena una lista de instancias de esta clase, quiero que estén ordenadas en un orden particular (obtenga una clave particular de cada una). Puedo hacer list.sort(key=Classname.sortKey) y definir un método sortKey, pero prefiero hacer list.sort() y hacer que funcione. Me imagino que puedo hacer esto anulando __cmp__. Sin embargo, ¿qué hago cuando estoy comparando con algo que no es mi tipo de datos? Me imagino algo así como ...cómo hacer un tipo de datos ordenables en Python?

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

pero que en su lugar funciona. No me importa qué orden tengan en una lista heterogénea. Simplemente devolvería 0 pero cosas como MyClass(...) == x son siempre ciertas, para cualquier x no es una instancia de MyClass.

Respuesta

Cuestiones relacionadas