while strings operator not logical example equal python boolean python-2.x comparison-operators

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 > .