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