在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()的情况下,与您的情况相同,该对象用于相同类型的对象(而不是哈希)。