Saltar al contenido

Usando el operador __add__ con múltiples argumentos en Python

Solución:

No, no puede utilizar varios argumentos. Python ejecuta cada uno + operador por separado, los dos + los operadores son expresiones distintas.

Por tu ejemplo, object + 1 + 2 realmente es (object + 1) + 2. Si (object + 1) produce un objeto que tiene un __add__ , Python llamará a ese método para el segundo operador.

Podría, por ejemplo, devolver otra instancia de A aquí:

>>> class A:
...     def __init__(self, val):
...         self.val = val
...     def __repr__(self):
...         return f'<A({self.val})>'
...     def __add__(self, other):
...         print(f'Summing {self} + {other}')
...         return A(self.val + other)
...
>>> A(42) + 10
Summing A(42) + 10
<A(52)>
>>> A(42) + 10 + 100
Summing A(42) + 10
Summing A(52) + 100
<A(152)>

Querrá que su valor de retorno sea un objeto en sí mismo, que también admita la operación de adición, por ejemplo:

class A:
    def __init__(self, value=0):
        self.value = value

    def __add__(self, b):
        return A(self.value + b)

    def __str__(self):
        return str(self.value)

a = A()
print(a + 1 + 2)

Producción:

3

Funciona perfectamente incluso con múltiples valores, ya que cada adición solo agrega dos valores (vea los múltiples signos + cuando anuncie múltiples valores):

class A:
    def __init__(self, value):
        self.a = value
    def __add__(self, another_value):
        return self.a + another_value


a = A(1)
print(a+1+1)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *