Anulación del operador conmutativo de Python

Hola Me preguntaba si hay una manera de hacer una anulación de un operador simétrico en Python. Por ejemplo, digamos que tengo una clase:

class A: def __init__(self, value): self.value = value def __add__(self, other): if isinstance(other, self.__class__): return self.value + other.value else: return self.value + other 

Entonces puedo hacer:

 a = A(1) a + 1 

Pero si lo bash:

 1 + a 

Me sale un error. ¿Hay alguna forma de anular la adición del operador para que 1 + a funcione?

Simplemente implementa un método __radd__ en tu clase. Una vez que la clase int no puede manejar la adición, el __radd__ si se implementa, lo retoma.

 class A(object): def __init__(self, value): self.value = value def __add__(self, other): if isinstance(other, self.__class__): return self.value + other.value else: return self.value + other def __radd__(self, other): return self.__add__(other) a = A(1) print a + 1 # 2 print 1 + a # 2 

Por ejemplo, para evaluar la expresión x – y, donde y es una instancia de una clase que tiene un __rsub__() , y.__rsub__(x) se llama si x.__sub__(y) devuelve NotImplemented .

Lo mismo se aplica a x + y .

En una nota al margen, es probable que desee que su clase subclase object . Consulte ¿Cuál es el propósito de subclasificar la clase “objeto” en Python?