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

Miguel Barraza correo en miguelbarraza.com.ar
Lun Nov 25 10:21:37 -03 2019


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191125/91bbcda8/attachment.html>


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