Sobrecarga dinamica de metodos en instancia

luis eduardo ramirez luedu01 en yahoo.es
Mar Jun 6 18:34:41 CEST 2006


Buen dia

Yo probe creando el metodo nuevo_a con una sola
variable y funciona, no se si este mal hacerlo asi

>>> class x:
...     def a(self, val):
...         print val + 1
...
>>> ix = x()
>>> ix.a(1)
2
>>> def nuevo_a(val):
...     print val - 1
...
>>> setattr(ix, 'a', nuevo_a)
>>> ix.a(1)
0
>>>       

Saludos

Luis
 --- Oswaldo Hernández <listas en soft-com.es> escribió:

> Hola a todos,
> 
> Estoy intentando realizar una sobrecarga de metodos
> de forma dinamica y me presenta algún problema, 
> intentaré explicarme:
> 
> #Defino la clase 'x' con un método 'a':
> 
>  >>> class x:
> 	def a(self, val):
> 		print val + 1
> 
> # Creo una instancia de esta clase
> 
>  >>> ix = x()
>  >>> ix.a(1)
> 2
> 
> # creo un nuevo metodo y reemplazo el existente en
> la instancia 'ix'
> 
>  >>> def nuevo_a(self, val):
> 	print val - 1
> 
>  >>> setattr(ix, "a", nuevo_a)
> 
>  >>> ix.a(1)
> 
> Traceback (most recent call last):
>    File "<pyshell#16>", line 1, in -toplevel-
>      ix.a(1)
> TypeError: nuevo_a() takes exactly 2 arguments (1
> given)
> 
> 
> 
> # si funciona si paso la instancia como parámetro
>  >>> ix.a(ix, 1)
> 0
> 
> Si realizo el setattr sobre la clase base 'x' si
> funciona, pero el metodo se sustituye en todas las 
> instancias de ella, lo que yo pretendo el
> sustituirlo únicamente en la instancia 'ix'.
> 
> ¿Hay forma de realizar esta sobrecarga únicamente en
> una de las instancias sin afectar al resto?
> 
> Gracias
> -- 
> *****************************************
> Oswaldo Hernández
> oswaldo en soft-com.es
> *****************************************
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 


__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
Regístrate ya - http://correo.yahoo.es 




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