我有一个代表几个字段的类。当对这个类的实例列表进行排序时,我希望它们按特定顺序排序(从每个类中获取一个特定的键)。我可以list.sort(key=Classname.sortKey)
并定义一个sortKey
方法,但我宁愿做list.sort()
并让它解决问题。我想我可以通过覆盖__cmp__
来做到这一点。但是,当我与不是我的数据类型的东西进行比较时,我该怎么办?我想像......
def __cmp__(self, o):
if isinstance(o, MyClass):
return cmp(self.sortKey(), o.sortKey())
return object.__cmp__(self, o) ##**wrong
但是相反。我不在乎他们在异构列表中采取什么排序。我只会返回0
,但MyClass(...) == x
之类的内容始终为真,因为任何x
都不是MyClass
的实例。
答案 0 :(得分:11)
查看http://wiki.python.org/moin/HowTo/Sorting/
您希望覆盖类中的__lt__
,以使内置sort
函数按您所描述的方式工作。