Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/02/2016, 12:41
Koan
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 15 años
Puntos: 9
La division no me funciona con sobrecarga de operadores

Hola de nuevo!

Pues eso, probando las sobrecargas de operadores con Python, la division no me funciona. Al menos, como si lo hacen, la suma, resta y multiplicacion.
Antes de postear el tema le he dado mil vueltas. Pero no encuentro porque no funciona.

El tipico codigo de clase Punto:

Código Python:
Ver original
  1. class Punto:
  2.    
  3.     def __init__(self, x, y):
  4.         self.x = x
  5.         self.y = y
  6.        
  7.     def __str__(self):
  8.         return 'x: ' + str(self.x) + ' y: ' + str(self.y)
  9.    
  10.     def __add__(self, otro):
  11.         # metodo suma
  12.         return Punto(self.x + otro.x, self.y + otro.y)
  13.    
  14.     def __sub__(self, otro):
  15.         # metodo resta
  16.         return Punto(self.x - otro.x, self.y - otro.y)
  17.    
  18.     def __mul__(self, otro):
  19.         # metodo multiplicacion
  20.         return Punto(self.x * otro.x, self.y * otro.y)
  21.    
  22.     def __div__(self, otro):
  23.         # metodo division
  24.         return Punto(self.x / otro.x, self.y / otro.y)


Instanciamos:

Código Python:
Ver original
  1. p1 = Punto(20, 10)
  2. p2 = Punto(5, 4)

Mostramos por pantalla:

Código Python:
Ver original
  1. # suma __add__
  2. print('Suma:', p1 + p2)
  3. # resta __sub__
  4. print('Resta:', p1 - p2)
  5. # mutiplicacion __mul__
  6. print('Multiplicacion:',p1 * p2)
  7. # division __div__
  8. print('Division:', p1 / p2)

Y cuando llega a la division nos arroja la excepcion:

Suma: x: 25 y: 14
Resta: x: 15 y: 6
Multiplicacion: x: 100 y: 40
Traceback (most recent call last):
File "C:\sobrecargaOperadores.py", line 41, in <module>
print('Division:', p1 / p2)
builtins.TypeError: unsupported operand type(s) for /: 'Punto' and 'Punto'

Pero si hacemos lo siguiente si funciona:

Código Python:
Ver original
  1. print(p1.__div__(p2))

x: 4.0 y: 2.5

¿Donde esta el error?