#it's python 3.2.3
class point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, point):
self.x += point.x
self.y += point.y
return self
def __repr__(self):
return 'point(%s, %s)' % (self.x, self.y)
class Test:
def __init__(self):
self.test1 = [point(0, i) for i in range(-1, -5, -1)]
self.test2 = [point(i, 0) for i in range(-1, -5, -1)]
print('%s\n+\n%s\n=\n%s' % (self.test1[0], self.test2[0], self.test1[0] + self.test2[0]))
test = Test()
input()
La salida de este programa esmétodo de adición personalizada falla durante la interpolación de cadenas
point(-1, -1)
+
point(-1, 0)
=
point(-1, -1)
Pero debe ser
point(-1, -1)
+
point(-1, 0)
=
point(-2, -1)
Pero si lo hago
print(point(-1, -1) + point(-1, 0))
Funciona perfectamente
Quiero saber por qué y cómo solucionar este problema
p.s. lo siento si mi inglés es malo :)
Nada como pegar código y tener a alguien más que vencer por unos segundos. Mi error claramente fue tomarse el tiempo de escribir "er" en "otro" ... ;-) – DSM
Pero, el código de OP devuelve el objeto original, y de hecho funciona en otro contexto. No creo que esta sea una explicación suficiente. – Marcin
Estoy de acuerdo con @Marcin, aunque este es el único problema obvio en el código OP, no puede ser toda la historia, solo los agrega una vez y no imprime el punto LH después de eso, solo antes. Los efectos secundarios no deberían ser notados por este caso de prueba en particular. A menos que los literales tuplas puedan ser evaluados fuera de orden? – lvc