Anuncios

Bienvenidos sean a este post, hoy veremos como es la sobrecarga de operadores en python.

Anuncios
Anuncios

Cuando se hablan de sobrecarga de operadores en un lenguaje nos referimos a la capacidad de poder modificar la conducta de un operador en el mismo, esto esta enfocado a los lenguajes mas antiguos o derivados de los mismos, como por ejemplo C o C++ y las derivaciones de este como Java, donde un operador como el de suma (+) solamente lo realiza con numeros pero con una sobrecarga podemos hacer que lo realice con textos u otros objetos de clases creadas por nosotros, si bien puede ser engorroso esto nos da una capacidad de expandir el alcance de nuestros codigos de una forma inimaginable, en este blog he hablado sobre este tema y si te interesa saber mas te dejo este post para entender el concepto mediante unos ejemplos en el mismo, pero volviendo a python este lo hace automaticamente tal como lo hacen muchos lenguajes modernos donde en base a los tipos de datos que tiene alrededor ejecuta una operacion, en el caso de numeros, o una concatenacion, en el caso de texto, facilitando nuestras tareas.

Anuncios

En python cuando usamos operadores en realidad estamos unos operadores especiales de los objetos, veamos un caso:

a[k]
Anuncios

Equivale a esto:

type(a).__getitem__(a, k)
Anuncios

Para entender este concepto vamos a realizar un ejemplo, para ello primero crearemos la siguiente clase:

>>> class Loco:
...     def __init__(self, t):
...             self._t = t
...     def __len__(self):
...             return len(self._t)
...     def __bool__(self):
...             return '44' in self._t
... 
>>>
Anuncios
Anuncios

En este caso primero tenemos a init para recibir un valor y con este crear e iniciar una variable de nuestra clase, las siguientes dos clases en realidad son la sobrecarga de dos funciones propias de todos los objetos como son len para obtener la longitud de una variable y bool para devolver un estado booleano de un variable informada, en este caso devolveremos el tamaño de la variable que creamos anteriormente, por ultimo en bool haremos algo especial porque le diremos que devuelva True si en la variable que creamos anteriormente posee el texto 44 de lo contrario nos devolvera un False, vamos a probar para ver como funciona con nuestra sobrecarga:

>>> loco = Loco('Holis! Tengo solo 9 años')
>>> print(len(loco))
24
>>> print(bool(loco))
False
>>>
Anuncios

Primero crearemos un nuevo objeto de esta clase y le pasamos un texto, lo siguiente es probar el len de este objeto, nos devuelve la longitud del mismo y por ultimo utilizamos el bool para ver cual estado nos devuelve y como vemos es False porque el texto no contiene el valor de la «condicion» que pasamos por medio del in, vamos a probar de nuevo con el siguiente codigo:

>>> loco2 = Loco("Hola, esto es para decirle que tengo 44 años")
>>> print(len(loco2))
44
>>> print(bool(loco2))
True
>>>
Anuncios

En este caso creamos otro objeto le pasamos otro texto, volvemos a chequear y veremos como nos cambio la longitud del texto nuevo y como ahora si devolvio un True porque encontro la frase que busca en la sobrecarga del operador o funcion, como pueden observar es una arma de doble filo porque como ocurre en otros lenguajes no debemos cambiar la operacion de los mismos demasiado hasta que hagan completamente lo opuesto pero si hacer alguna pequeña modificacion como hicimos con bool en este ejemplo.

Anuncios

En resumen, hemos visto como es la sobrecarga de operadores en python, hemos hablado de como podemos hacerlo en otros lenguajes, tambien hemos visto como algunas las hace automaticamente python pero tambien hemos visto como podemos modificar algunas para acoplarse a nuestras necesidades, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50