Como ya vimos al principio de este curso, en python tenemos a nuestra disposición los operadores matemáticos y los operadores relacionales.
Además podemos redefinir estos operadores cuando planteamos una clase.
Operadores matemáticos
Operador +
1 |
__add__(self,objeto2) |
Operador –
1 |
__sub__(self,objeto2) |
Operador *
1 |
__mul__(self,objeto2) |
Operador //
1 |
__floordiv__(self,objeto2) |
Operador /
1 |
__div__(self,objeto2) |
Vamos a ver un ejemplo para aclararnos un poco más en cómo podemos utilizar estos operadores.
Crear una clase Jugador con los atributos nombre y puntos. Crear un segundo método __add__ para sumar los puntos de los jugadores. Crear al menos dos objetos de la clase Jugador e informar del total de puntos encestados.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Definimos nuestra clase class Jugador: # inicializamos los atributos def __init__(self,nombre,puntos): self.nombre=nombre self.puntos=puntos #creamos una función para redefinir la suma def __add__(self,objeto2): return self.puntos+objeto2.puntos pj1=Jugador('Carlos',21) pj2=Jugador('Bryan',32) print("Los jugadores han anotado el total de puntos de: ") print(pj1+pj2) |
Creamos nuestra clase Jugador con los métodos que decíamos antes.
1 2 |
def __add__(self,objeto2): return self.puntos+objeto2.puntos |
Con el método __add__ podemos realizar la suma de varios elementos y obtener dicho resultado tan sólo imprimiendo la suma en este caso.
1 |
print(pj1+pj2) |
Vemos que esto puede resultarnos realmente útil aunque no será así en todos los casos, dependerá de las funcionalidades de nuestro programa.
Operadores relacionales
Operador ==
1 |
__eq__(self,objeto2) |
Operador !=
1 |
__ne__(self,objeto2) |
Operador >
1 |
__gt__(self,objeto2) |
Operador >=
1 |
__ge__(self,objeto2) |
Operador <
1 |
__lt__(self,objeto2) |
Operador <=
1 |
__le__(self,objeto2) |
El funcionamiento es muy parecido a los operadores matemáticos. En este caso vamos a realizar el mismo ejercicio pero comparando si los dos jugadores han anotado la misma cantidad de puntos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# creamos nuestra clase class Jugador: # inicializamos los atributos def __init__(self,nombre,puntos): self.nombre=nombre self.puntos=puntos # redefinimos el operador == def __eq__(self,objeto2): if self.puntos==objeto2.puntos: return True else: return False pj1=Jugador('Carlos',21) pj2=Jugador('Bryan',32) if pj1==pj2: print("Los jugadores han anotado los mismos puntos") else: print("Los jugadores no han anotado los mismos puntos") |
Utilizamos la función __eq__ en la clase para obtener la funcionalidad que queremos obtener
1 2 3 4 5 |
def __eq__(self,objeto2): if self.puntos==objeto2.puntos: return True else: return False |
Aquí ya estamos comparando la cantidad de puntos de los jugadores, de tal manera que al comparar los objetos
1 2 3 4 |
if pj1==pj2: print("Los jugadores han anotado los mismos puntos") else: print("Los jugadores no han anotado los mismos puntos") |
Ya estaríamos comparando los puntos y obtendríamos el resultado comparando simplemente ambos objetos.
Problemas propuestos
Ejercicio 1
Desarrollar un programa con una clase llamada Lista. Tendrá como atributo una lista. Redefinir los operadores de suma, resta, multiplicación y división respecto a un valor entero.
Ejercicio 2
Desarrollar un programa que tenga una clase llamada Rectángulo. Definir para la clase dos atributos menor y mayor (estos corresponderán a los lados del rectángulo). Redefinir todas las funciones de los operadores relacionales mencionados. Hacer la comprobación desde el bloque principal con al menos uno de los operadores redefinidos.
Además tenéis la lista completa de ejercicios en nuestro repositorio en github.
Con esto acabamos el doceavo capítulo de nuestro curso de python 3.5. Si tienen cualquier duda relacionada con el contenido explicada en este capítulo, pueden exponerla en sus comentarios y le ayudaremos a resolverla lo antes posible. Nos vemos en el siguiente capítulo donde aprenderemos a trabajar con ficheros en python.
<- Anterior | Volver al índice | Siguiente -> |