在python中对类实例进行排序
问题内容:
python 2.7用什么来排序普通类实例?我对默认排序行为感兴趣。
假设我有课
class S():
pass
然后,我可以创建几个实例,并对它们进行排序:
a = S(); b = S(); c = S()
l = [(a,'a'), (b,'b') ,(c, 'c')]
sorted(l)
这将打印对象的某种排序。现在我有一个两部分的问题:
- python是使用对象的
__hash__()
,因此使用对象id()
吗? - 是否可以覆盖
__hash__()
以影响排序行为?
问题答案:
Python的排序算法使用“小于”测试专门比较项目,该测试可以使用__cmp__()
特殊方法(现已弃用)或__lt__()
在类上实现。
在没有关于如何比较两个对象的任何特定说明id()
的情况下,与您的情况相同,该对象用于相同类型的对象(而不是哈希)。