Foros del Web » Programando para Internet » Python »

instanciar objetos en tiempo de ejecución

Estas en el tema de instanciar objetos en tiempo de ejecución en el foro de Python en Foros del Web. Hola a todos!! Bien, antes que nada, aclarar que soy nuevo en la programación en general, tanto como en python. Lo que trato de saber, ...
  #1 (permalink)  
Antiguo 03/11/2010, 17:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Pregunta instanciar objetos en tiempo de ejecución

Hola a todos!!
Bien, antes que nada, aclarar que soy nuevo en la programación en general, tanto como en python.
Lo que trato de saber, y no he podido encontrar en una semana de busqueda, es: ¿Es posible que en tiempo de ejecución, el usuario pueda instanciar tantos objetos como quiera, con base a puro raw_input?. Lo que intento es que se pida al usuario un nombre para el objeto, y que la cadena que inserte, se convierta en el nombre de la instancia. Un código de mi intento fallido:
Código:
def main():
    var = raw_input("Inserte el nombre del nuevo objeto: ")
    # tambien le solicité valores para atributos (par1 y par2) al usuario.
    str(var) = clase(par1, par2) #esto resulta en una excepción.
   #var = clase(par1, par2) tampoco sirvió obviamente.
Lo que se me ocurrio, es una especie de:
Código:
var = raw_input('Inserte el nombre del nuevo objeto: ')
os.system('%s = clase(par1, par2)' % (var))
pero que en vez de tirarlo al SO, lo tire al intérprete (algo así como 'echo'), aunque mis conocimientos son muy limitados y no tengo idea de como hacerlo.
Por favor, espero contar con su ayuda, es muy importante para mi lograr esto para mi proyecto principal, aunque en este ejemplo carezca de importancia. Cuando menos me quiero enterar si sí es posible o no.
Gracias por tomarse su tiempo, Saludos!
  #2 (permalink)  
Antiguo 03/11/2010, 17:42
 
Fecha de Ingreso: julio-2010
Mensajes: 46
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: instanciar objetos en tiempo de ejecución

Lo que puedes hacer es una especie de switch (implementado con sentencias if - elif) en el que preguntas por lo que el usuario escribió y en base a ello creas tu objeto. Claro que quedaría hardcodeado y no sería lo mejor...

Otra cosa que se me ocurre es tener un diccionario con clave [nombre de la clase] y valor [instancia de la clase].

Algo como:

dic = {"clase1":instancia_de_clase1, "clase2":instancia_de_clase2...} y luego llamas a la función __init__ de la instancia con los parámetros que quieras.

Saludos,
g3rm4n
  #3 (permalink)  
Antiguo 03/11/2010, 18:44
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: instanciar objetos en tiempo de ejecución

Para que le dejaría al usuario que nombre va a tener una instancia?
Para eso tienes diccionarios o listas.

Código Python:
Ver original
  1. class clase:
  2.     def __init__(self, par1, par2):
  3.         self.par1 = par1
  4.         self.par2 = par2
  5.  
  6. def main():
  7.     d = {}
  8.     while True:
  9.         name = raw_input("Inserte el nombre del nuevo objeto: ")
  10.         par1, par2 = raw_input("Inserte los valores separado por comas x,y: ").split(",")
  11.         objeto = clase(par1, par2)
  12.         d[name] = objeto
  13.         salir = raw_input("Desea continuar?[S/n] ")
  14.         if salir and (salir[0] != 's' or salir != 'S'):
  15.             break
  16.     print d
  17.    
  18. if __name__ == '__main__':
  19.     main()

Claro que puedes usar input() y ejecutar cualquier código.
  #4 (permalink)  
Antiguo 03/11/2010, 18:57
 
Fecha de Ingreso: noviembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
De acuerdo Respuesta: instanciar objetos en tiempo de ejecución

Perfecto! la solución del diccionario es exactamente lo que buscaba, muchas gracias!!
  #5 (permalink)  
Antiguo 03/11/2010, 21:27
 
Fecha de Ingreso: julio-2010
Mensajes: 46
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: instanciar objetos en tiempo de ejecución

Había entendido mal la pregunta. Pensé querías crear objetos de la "clase" que ingrese el usuario. Si el usuario ponía "auto" que se cree un objeto del tipo "auto".
Leí rápido y contesté cualquier cosa. Pido disculpas.

Saludos!
__________________
---
“If you can't convince them, confuse them" - Harry S. Truman

Etiquetas: programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.