Nunca antes he manejado operadores inversos, ¡por favor no llame! Acabo de terminar de aprender sobre ellos, así que quería probarlos. Pero por alguna razón, no está funcionando. Aquí está el código:Uso de operadores inversos en Python
>>> class Subtract(object):
def __init__(self, number):
self.number = number
def __rsub__(self, other):
return self.number - other.number
>>> x = Subtract(5)
>>> y = Subtract(10)
>>> x - y # FAILS!
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
x - y
TypeError: unsupported operand type(s) for -: 'Subtract' and 'Subtract'
>>> x.__rsub__(y) # WORKS!
-5
Si cambio __rsub__
-__sub__
, funciona.
¿Qué estoy haciendo mal? ¿Cuál es también el propósito de estos operadores inversos?
¿Pero cómo funciona explícitamente el llamado '__rsub__'? – Randy
Porque '__rsub__' es una función que definió y puede llamarla como cualquier otra función; simplemente no se llamará automáticamente para implementar el operador '-'. – geoffspear
@Randy: Porque cuando lo llamas explícitamente, es solo un método regular. ¿Por qué esperarías que no funcionara? Lo único especial sobre '__rsub__' es que bajo ciertas circunstancias, Python traducirá una operación de resta' - 'en una llamada a' __rsub__' - pero como se explica en las respuestas, esas ciertas circunstancias no están presentes en tu ejemplo –