True < 2 是如何实现的?

How is True < 2 implemented?

它没有直接在 bool 上实现。

>>> True.__lt__(2)
AttributeError: 'bool' object has no attribute '__lt__'

而且它显然也没有在 int 上实现:

>>> super(bool, True).__lt__(2)
AttributeError: 'super' object has no attribute '__lt__'

2 没有反射版本的 __lt__ 来控制操作,并且由于 int 类型不是 bool 的子类,无论如何都不会工作.

Python 3 的行为符合预期:

>>> True.__lt__(2)
True

那么,True < 2在Python2中是如何实现的呢?

True 等于 Python 中的 1(这就是为什么它小于 2)并且 boolint 的子类:基本上,FalseTrue 是 0 和 1 with funky repr()s.

至于如何在整数上实现比较,Python 使用 __cmp__(),这是 Python 中比较的老式写法。 (Python 3 不支持 __cmp__(),这就是它在那里实现为 __lt__() 的原因。)参见 https://docs.python.org/2/reference/datamodel.html#object.__cmp__

您没有找到 super(bool, True).__lt__,因为 int 使用旧的 __cmp__ 方法而不是 Python 上的丰富比较 2。它是 int.__cmp__

True 是引用类型 int 的对象的唯一名称,特别是值 1。表达式 True < 2 等于 1 < 2。同样,False 等于 0。在 Python 2 中,您有一个方法 __cmp__,即 returns 0 如果值等于,-1 如果值大于其他值和 1 如果一个值太小于其他值。示例:

>>> True.__cmp__(1)
0
>>> True.__cmp__(0)
1
>>> True.__cmp__(-1)
1
>>> True.__cmp__(0)
1
>>> True.__cmp__(1)
0
>>> True.__cmp__(2)
-1

在 Python 3 中,您有一个 __lt____gt__ 方法,它们等同于 <>