¿Cuál es la forma más natural de completar el siguiente código?¿Cómo se manejan los tipos mixtos cuando se implementan operadores de comparación?
import functools
@functools.total_ordering
class X:
def __init__(self, a):
self._a = a
def __eq__(self, other):
if not isinstance(other, X):
return False
return self._a == other._a
def __lt__(self, other):
if not isinstance(other, X):
return ... // what should go here?
return self._a < other._a
if __name__ == '__main__':
s = [2, 'foo', X(2)]
s.sort()
print s
Simplemente regresar Falso o Verdadero no es una buena idea. Considere el caso cuando tiene otra clase Y análoga y hace X ('foo') X ('foo'). Los resultados pueden no ser consistentes. –
user763305
Pero el regreso de NotImplemented funciona. Entonces Python usará su propio orden predeterminado que es algo arbitrario pero consistente. – user763305