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)