Подтвердить что ты не робот

Как реализуется True <2?

Он не реализован непосредственно на bool.

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

И он, по-видимому, не реализован на int:

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

Для управления операцией нет отраженной версии __lt__ для 2, а поскольку тип int не является подклассом bool, который никогда не будет работать.

Python 3 ведет себя как ожидалось:

>>> True.__lt__(2)
True

Итак, как True < 2 реализован в Python 2?

4b9b3361

Ответ 1

Вы не нашли super(bool, True).__lt__, потому что int использует устаревший метод __cmp__ вместо богатых сравнений на Python 2. Он int.__cmp__.

Ответ 2

True равен 1 в Python (поэтому он меньше 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__

Ответ 3

True - это просто имя, которое относится к объекту типа int, в частности значение 1. Выражение True < 2 равно 1 < 2. То же самое, False равно 0. В Python 2 у вас есть метод __cmp__, который возвращает 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__, которые являются эквивалентами < и >.