2012-07-06 10 views
10

Estoy aprendiendo a programar y estoy aprendiendo Python como mi primer idioma. Como ejercicio, intento escribir un programa de libreta de direcciones. El usuario crea nuevos contactos mediante el símbolo del sistema. Los nuevos contactos son instancias de objetos de la clase Contactos.Creación de variables con nombre dinámico a partir de la entrada del usuario

Sé cómo crear una instancia de un objeto de clase dentro del código, pero ¿cómo creo uno con un nombre de variable basado en la entrada del usuario? Supongamos que le pido un nombre al usuario: ¿cómo tomo esa información y la uso para el nombre de la variable de mi nuevo objeto?

Gracias!

+0

Estamos encantados de ayudarle, pero que realmente debe publicar algo de código (lo que ha intentado) para que le pueda orientar mejor a – inspectorG4dget

Respuesta

19

Según los comentarios, resulta que estás preguntando por algo que se pregunta más de una vez aquí. "¿Cómo puedo crear variables dinámicamente con nombre".

Respuesta: No haga esto. Es probable que haya mejores formas de resolver el problema.

Explicación:

Si se va a crear variables con nombres dinámicos, que no tiene absolutamente un buen manejo a ellos una vez que se crean. Seguro que hay formas de verificar los globales y los ámbitos locales para ver qué hay allí. Pero el hecho es que debes tener control definitivo sobre lo que se está creando.

Lo que debe hacer es ponerlos en un diccionario:

people = {} 
name = raw_input("What name? ") # "person" 
people[name] = User(name) 

print people 
# {'person': <User: "person">} 

print people.keys() 
# ['person'] 

De esta manera usted no está creando las variables arbitrarias en su espacio de nombres. Ahora tiene un diccionario de claves y objetos como valores. También es una lata de gusanos que permite que una entrada proporcionada por el usuario impulse el nombre de una variable.

Para obtener más información, solo busque aquí el mismo tema y vea numerosos ejemplos de por qué no debería hacer esto. No importa qué ejemplos vea mostrándole cómo usar globals(), etc., por favor tome mi consejo y no siga esa ruta. Ama y disfruta ... y tal vez abraza y besa, tu diccionario.

Referencias:

+0

Gracias por la ayuda! Sin embargo, tal vez no fui lo suficientemente preciso con mi pregunta. Sé cómo asignar valores a los campos de un objeto en función de la entrada del usuario, pero ¿qué pasa con el nombre real del objeto? – ShaunSoda

+0

Sí, debe ser mucho más detallado cuando solicite ayuda aquí. ¿Estás hablando de la representación de la instancia cuando imprimes el objeto? ¿Qué quiere decir con el "nombre" del objeto? – jdi

+0

Hehe. Lo siento, como dije, estoy aprendiendo a programar, así que tengan paciencia conmigo en los términos. Cuando creas un nuevo objeto de clase, le das un nombre. Mi clase se llama Contactos, así que si tuviera que crear nuevos objetos, podrían llamarse contacto1, contacto2, etc. ¿Quizás se les llame identificadores? Quiero nombrar el identificador de cada objeto independientemente de las entradas del usuario. – ShaunSoda

0

No dejar en claro por qué desea crear instancias de objetos cuyo nombre se determina como el tiempo de ejecución como usted deseo. Es importante darse cuenta de que esa no es una práctica común.

Es posible, sin embargo, el uso de la orden interna setattr:

setattr(someobject, name, user) 

uso Algo más normal sería el uso de un diccionario. Por lo tanto, si tiene más de una instancia de usuario y desea almacenarlas, puede almacenarlas en un diccionario como el siguiente. Esto le permitiría hacer referencia al objeto por su nombre.salida

class User(object): 

    def __init__(self, name): 
     self.name = name 


users = {} 

name = raw_input("What name?") 
users[name] = User(name) 


print users 
print users['Andre'].name 

muestra:

What name?Andre 
{'Andre': <__main__.User object at 0x7f6b418a8710>} 
Andre 
+0

Desafortunadamente, esto terminó no siendo lo que el OP quería. Proporcioné esta misma respuesta y luego tuve que cambiarla. – jdi

+0

barf. también es importante lo que otros aprenderán de tropezar con esta pregunta. –

+0

¡Muchas gracias! ¡Tiene sentido! – ShaunSoda

Cuestiones relacionadas