2011-01-07 3 views
8

J'ai une classe représentant quelque chose avec quelques champs. Quand une liste d'instances de cette classe est triée, je veux qu'elles soient triées dans un ordre particulier (obtenir une clé particulière de chacune). Je peux juste faire list.sort(key=Classname.sortKey) et définir une méthode sortKey, mais je préfère faire list.sort() et le faire fonctionner. Je figure que je peux le faire en remplaçant __cmp__. Cependant, que dois-je faire lorsque je compare avec quelque chose qui n'est pas mon type de données? Je vois quelque chose comme ...comment rendre le type de données triable en Python?

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

mais cela fonctionne à la place. Je me fiche de l'ordre qu'ils prennent dans une liste hétérogène. Je voudrais juste retourner 0, mais alors des choses comme MyClass(...) == x est toujours vrai, pour tout x pas une instance de MyClass.

Répondre

Questions connexes