Sobrecargar método

Victor Peinado vitojph en gmail.com
Jue Dic 1 16:12:07 CET 2005


¡Hola a todos!

Creo que alguna vez ya se ha hablado de este tema en la lista.
Entiendo por sobrecargar un método el hecho de implementar distintas
variantes de un método para que se comporte de forma diferente en
función del tipo o número de argumentos que reciba. ¿Es correcto? ¿Es
lo mismo que los multimétodos?

>>> c = Cosa()
>>> c.leeDatos([])
datos es una lista de elementos
>>> c.leeDatos(open("cosa.txt", "r"))
Datos es un fichero

Bueno, hasta ahora, las pocas veces que he necesitado hacer algo así
he utilizado isinstance() pero he leído que su uso no es muy
aconsejable. ¿Hay alguna forma más elegante/eficiente/correcta de
hacer lo siguiente?

class Cosa:
   def leeDatos(self, datos):
      if isinstance(datos, file):
         print "Datos es un fichero"
         # lee el fichero
      elif isinstance(datos, list):
         print "datos es una lista de elementos"
         # recorre la lista elemento a elemento


He estado leyendo algunas cosas al respecto ([1, 2, 3]) pero no
termino de entenderlo. ¿Alguna lectura más clara? Gracias de antemano
y saludos.

[1] http://www.artima.com/weblogs/viewpost.jsp?thread=101605
[2] http://www.onlamp.com/pub/a/python/2003/05/29/multimethods.html
[3] http://blog.ianbicking.org/more-on-multimethods.html


--
Víctor Peinado || <vitojph /> || http://nlp.uned.es/~victor
¡Ningún investigador sin contrato! http://www.precarios-madrid.org




Más información sobre la lista de distribución Python-es