En Python no existe la sobrecarga de métodos tal como se entiende en Java o C++: si una clase define dos métodos con el mismo nombre, el segundo sobrescribe silenciosamente al primero y la primera versión desaparece. Esto suele confundir a quienes vienen de lenguajes tipados estáticamente, donde distance(punto) y distance(x, y) podrían convivir como firmas distintas.
Sin embargo, Python sí admite la sobrecarga de operadores, razón por la que el símbolo '+' sirve tanto para sumar números como para concatenar cadenas. El truco está en los métodos mágicos o dunder: definir add dentro de una clase hace que el operador '+' funcione con sus instancias. Así, una clase Point con un add apropiado puede sumarse con otra Point para devolver un nuevo punto.
El artículo distingue con claridad los dos sentidos del término "overloading": la sobrecarga de métodos (no soportada en Python) y la sobrecarga de operadores (plenamente soportada mediante métodos como add). Para quienes necesiten auténtica sobrecarga de métodos, se presentan dos alternativas: implementar a mano un método distribuidor que enrute según el tipo o número de argumentos con isinstance(), o recurrir al decorador @singledispatch del módulo functools, que registra variantes según el tipo del primer argumento. La primera opción se adapta a lógicas de despacho complejas; la segunda es más limpia y pythónica cuando el criterio es simplemente el tipo del primer parámetro.
