En la Programación Orientada a Objetos, la sobrecarga se refiere a la posibilidad de contar con dos o mas funciones con el mismo nombre pero con comportamiento diferentes. La sobrecarga de operadores trata básicamente de lo mismo, solo que en el ámbito de los operadores (+, -, *, /, etc).
¿Cuál es la ventaja de contar con esta característica? Para responder esta pregunta deseo mostrarles el siguiente código Java:
Código :
/* * Supongamos que la clase Matriz existe y que su constructor genera un arreglo * bidimensional de enteros, relleno de ceros, es decir, para toda celda de la * matriz, matriz[i][j] == 0 */ Matriz mi_matriz = Matriz(10, 20); Matriz otra_matriz = Matriz(10, 20); /* * Para sumar nuestras matrices, tendríamos que invocar al método del objeto * de tipo Matriz llamado Sumar */ Matriz matriz_suma = mi_matriz.Sumar(otra_matriz);
Todo bien, pero ¿Y si pudiéramos utilizar el símbolo suma (+) para realizar la última línea del código anterior? ¿No sería eso genial? Pues, de eso se trata la sobrecarga de operadores y ahora les mostraré como hacerlo en Python.
Sobrecarga de operadores – Código de ejemplo
Código :
class Matriz(object): def __init__(self, numero_filas, numero_columnas): self.numero_filas = numero_filas self.numero_columnas = numero_columnas # Revisar mi tutorial "Crear matrices en Python utilizando listas" # para mas informacion self.arreglo = [[0] * numero_columnas for i in range(numero_filas)] def __add__(self, matriz): resultado = Matriz(self.numero_filas, self.numero_columnas) for i in xrange(self.numero_filas): for j in xrange(self.numero_columnas): resultado.arreglo[i][j] = self.arreglo[i][j] + matriz.arreglo[i][j] return resultado # ------------------------------------------------------------------------- Main # Instanciamos nuestras matrices mi_matriz = Matriz(2, 3) otra_matriz = Matriz(2, 3) # Y las sumamos matriz_suma = mi_matriz + otra_matriz
Funciones y Métodos especiales en Python
Existen ciertas funciones y métodos que son tratados de manera especial por el intérprete de Python, éstos pueden ser fácilmente reconocidos por comenzar y terminar con dos (2) underscore (o piso, tal y como le dicen en mi país, Venezuela).
__nombre_funcion__
En el código de ejemplo se puede apreciar que la clase Matriz posee dos métodos especiales: __init__ y __add__. El método __init__ es el constructor de la clase y como todo constructor, éste es llamado al momento de instanciar un objeto.
Código :
variable = Clase() # El método __init__ es invocado de forma implícita
El método __add__, tal y como adivinaron, es el que hace posible la sobrecarga del operador suma. Para Python, la expresión
Código :
objeto1 + objeto2
es equivalente a la sentencia
Código :
objeto1.__add__(objeto2)
Ésto es valido para el resto de los operadores, __mul__ para la multiplicación, __div__ para la divición, __pow__ para la potenciación, etc.
Para que el código fuese sencillo, he omitido intencionalmente verificar si las dimensiones de las matrices a sumar coinciden. Si así lo desean pueden hacer ésto a modo de ejercicio.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Publica tu comentario
El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro
Entra al foro y participa en la discusión
o puedes...
¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?
Inicia sesión
¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?
Registrate