如何实现True <2?

wim*_*wim 24 python boolean python-2.x comparison-operators

它没有直接在bool上实现.

>>> True.__lt__(2)
AttributeError: 'bool' object has no attribute '__lt__'
Run Code Online (Sandbox Code Playgroud)

它显然没有实现int:

>>> super(bool, True).__lt__(2)
AttributeError: 'super' object has no attribute '__lt__'
Run Code Online (Sandbox Code Playgroud)

没有反映版本的__lt__for 2来控制操作,因为int类型不是它的子类,bool无论如何都不会工作.

Python 3的行为符合预期:

>>> True.__lt__(2)
True
Run Code Online (Sandbox Code Playgroud)

那么,如何True < 2在Python 2中实现?

kin*_*all 50

True在Python中等于1(这就是为什么它小于2)并且bool是一个子类int:基本上,False并且True是0和1与funky repr()s.

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

  • 啊,是的就是这样.我忘记了''__ cmp__`.谢谢! (2认同)

use*_*ica 23

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