python - strings - ¿Cómo se implementa True<2?
python logical operators example (3)
No encontró super(bool, True).__lt__ porque int usa el método heredado __cmp__ lugar de comparaciones ricas en Python 2. Es int.__cmp__ .
No está implementado directamente en bool.
>>> True.__lt__(2)
AttributeError: ''bool'' object has no attribute ''__lt__''
Y aparentemente tampoco está implementado en int :
>>> super(bool, True).__lt__(2)
AttributeError: ''super'' object has no attribute ''__lt__''
No hay una versión reflejada de __lt__ for 2 para controlar la operación, y dado que int type no es una subclase de bool que nunca funcionaría de todos modos.
Python 3 se comporta como se espera:
>>> True.__lt__(2)
True
Entonces, ¿cómo se implementa True < 2 en Python 2?
True es igual a 1 en Python (por lo que es menos de 2) y bool es una subclase de int : básicamente, False y True son 0 y 1 con funky repr() s.
En cuanto a cómo se implementa la comparación en enteros, Python usa __cmp__() , que es la forma __cmp__() de escribir comparaciones en Python. (Python 3 no admite __cmp__() , razón por la cual se implementa como __lt__() allí). Consulte https://docs.python.org/2/reference/datamodel.html#object.__cmp__
True es un nombre justo que se refiere a un objeto de tipo int , específicamente el valor 1. Expression True < 2 es igual a 1 < 2 . Igual, False es igual a 0. En Python 2 tienes un método __cmp__ , que devuelve 0 si los valores son iguales, -1 si es un valor demasiado mayor que otro valor y 1 si es un valor muy inferior a otro valor. Ejemplo:
>>> True.__cmp__(1)
0
>>> True.__cmp__(0)
1
>>> True.__cmp__(-1)
1
>>> True.__cmp__(0)
1
>>> True.__cmp__(1)
0
>>> True.__cmp__(2)
-1
En Python 3 tienes los métodos __lt__ y __gt__ que son equivalentes de < y > .