如果__lt__协议没有实现,比较如何工作?

时间:2013-03-09 02:13:57

标签: python python-2.7 comparison

我最感兴趣的是发生了什么,但是我可以说我有一个自定义类,实现了__eq__而没有别的。

其他比较如何解决?什么是默认行为?每次运行比较时,我都会得到不同的结果。我知道我需要实现这些,并且我也可以使用@total_ordering来简化工作。

幕后实际发生了什么?这主要是出于好奇。

2 个答案:

答案 0 :(得分:5)

如果未定义__lt__,则比较会使用__cmp__。如果没有定义,则使用默认比较器。并且看起来默认比较器通过“对象标识(地址)”进行比较。

有关详细信息,请参阅the docs for __cmp__

答案 1 :(得分:1)

Python文档的this部分提供了一些其他信息:

  

不同类型的对象,除了不同的数字类型和不同的字符串类型,从不比较相等;这些对象是一致但任意排序的(因此排序异构数组会产生一致的结果)。

     

CPython实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

相关问题