[pyar] consulta sobre la utilización de la función setattr

Gabriel Acosta acostadariogabriel en gmail.com
Lun Nov 25 10:59:55 -03 2019


Hola Miguel,

Probá pasándole la clase y no la instancia a setattr, entonces deberías
hacerlo antes de crear el objeto pj. Y en ese caso hasta no haría falta
usar setattr.

Saludos


On Mon, Nov 25, 2019, 10:22 AM Miguel Barraza <correo en miguelbarraza.com.ar>
wrote:

> Buenas, estoy investigando sobre la metaprogramación en python, y no me
> queda muy claro la utilización de la función setattr para agregar metodos
> de forma dinámica a una instancia. si yo agrego una función como método a
> una instancia, debería tomar el contexto y recibir self como primer
> parámetro, pero no pasa... ejemplo:
> setattr(obj, "nombre", funcion)
>
> yo calcularía que debería crear:
> def funcion(self):
>     # codigo...
>
> pero si hago eso me dice que espera un parametro, como que no estaría
> recibiendo el self... para que lo reciba tengo que poner:
> setattr(obj, "nombre", lambda: funcion(obj))
>
> es la unica forma que se me ocurrió para que funcione, creo que lo estoy
> haciendo mal... alguien me podría tirar alguna luz sobre este tema, ¿de que
> forma tengo que usar setattr para que reciba el contexto y la función
> agregada reciba el self sin usar el lambda?.
>
> muestro un ejemplo de código donde lo pruebo con el lambda y funciona:
> y no se si habrá otra forma de hacer lo mismo pero sin usar el lambda.
>
> --- ejemplo ---
> class pj():
>     def __init__(self):
>         self.edad = 1
>
> alguien = pj()
> print("edad de alguien", alguien.edad)
>
> def crecer(self):
>   self.edad+=1
>
> setattr(alguien, "crecer", lambda: crecer(alguien))
>
> alguien.crecer()
> print("ahora tiene", alguien.edad)
> --- fin del ejemplo ---
>
> gracias.
>
> atte, Miguel
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191125/0ee8dcf9/attachment.html>


Más información sobre la lista de distribución pyar