我最感兴趣的是发生了什么,但是我可以说我有一个自定义类,实现了__eq__而没有别的。
其他比较如何解决?什么是默认行为?每次运行比较时,我都会得到不同的结果。我知道我需要实现这些,并且我也可以使用@total_ordering
来简化工作。
幕后实际发生了什么?这主要是出于好奇。
答案 0 :(得分:5)
如果未定义__lt__
,则比较会使用__cmp__
。如果没有定义,则使用默认比较器。并且看起来默认比较器通过“对象标识(地址)”进行比较。
有关详细信息,请参阅the docs for __cmp__
。
答案 1 :(得分:1)
Python文档的this部分提供了一些其他信息:
不同类型的对象,除了不同的数字类型和不同的字符串类型,从不比较相等;这些对象是一致但任意排序的(因此排序异构数组会产生一致的结果)。
CPython实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。