为什么Python中的`object()> 0`为True?

sat*_*oru 5 python

In [32]: object() > 0
Out[32]: True
Run Code Online (Sandbox Code Playgroud)

事实上,它比我尝试过的任何整数都要大.

JBe*_*rdo 12

因为Python 2.x试图在不同类型的对象之间进行比较(即使它们没有意义).

它已在Python 3上修复:

>>> object() > 0
Traceback (most recent call last):
  File "<pyshell#320>", line 1, in <module>
    object() > 0
TypeError: unorderable types: object() > int()
Run Code Online (Sandbox Code Playgroud)

Python 2.x中使用的顺序:

None < Numbers < [Other types in alphabetical order]
Run Code Online (Sandbox Code Playgroud)

数字是:int,boolfloat而不是complex因为他们不能比拟的

此外,来自旧样式类(命名instance对象)的对象保留在其间None并且Numbers出于某种奇怪的原因.

  • 确实,从广义的角度来看,比较不同的对象类型没有意义,但能够对异构类型进行排序并获得一致的排序是很好的. (2认同)