Sobrecarga de operadores en Python

En la Programación Orientada a Objetos (OOP por sus siglas en ingles), 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

/*
 * 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.

Lee el resto de esta entrada »