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