Foros del Web » Programando para Internet » Python »

La division no me funciona con sobrecarga de operadores

Estas en el tema de La division no me funciona con sobrecarga de operadores en el foro de Python en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 29/02/2016, 12:41
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 14 años, 3 meses
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?
  #2 (permalink)  
Antiguo 29/02/2016, 12:56
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: La division no me funciona con sobrecarga de operadores

Sí es python 3 tienes que sobrecargar __floordiv__ y __truediv__, no __div__.


Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 29/02/2016, 13:40
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: La division no me funciona con sobrecarga de operadores

Cita:
Iniciado por Carlangueitor Ver Mensaje
Sí es python 3 tienes que sobrecargar __floordiv__ y __truediv__, no __div__.


Saludos
Anda! Pues muchas gracias. Con razon no encontraba respuesta en libros o tutoriales. Pues es un dato a destacar y no esta muy documentado en libros mas modernos. Incluso he comprado algun libro sobre Python 3 y no arrojan este dato. Para mi, fundamental.

En mi codigo he de poner __truediv__

Saludos

Etiquetas: division, int, operadores, sobrecarga
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:17.