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)并且 bool
是 int
的子类:基本上,False
和 True
是 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__
方法,它们等同于 <
和 >
。
它没有直接在 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)并且 bool
是 int
的子类:基本上,False
和 True
是 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__
方法,它们等同于 <
和 >
。