2012-07-06 27 views
10

Sto solo imparando a programmare e sto imparando Python come prima lingua. Come esercizio sto cercando di scrivere un programma di rubrica. Il nuovo contatto viene creato dall'utente utilizzando il prompt dei comandi. I nuovi contatti sono istanze di oggetti della classe Contatti.Creazione di variabili denominate dinamicamente dall'input dell'utente

So come istanziare un oggetto di classe dall'interno del codice, ma come posso crearne uno con un nome di variabile in base all'input dell'utente? Dire che chiedo all'utente un nome: come faccio a prendere queste informazioni e ad usarle per il nome della variabile del mio nuovo oggetto?

Grazie !!

+0

Siamo felici di aiutare, ma si dovrebbe davvero inviare un codice (quello che hai provato) in modo da poter guidare meglio – inspectorG4dget

risposta

19

Dai commenti, si scopre che si sta chiedendo qualcosa che viene richiesto più di una volta qui. "Come posso creare variabili nominate dinamicamente".

Risposta: Non farlo. È probabile che ci siano modi migliori per risolvere il problema.

Spiegazione:

Se si dovesse creare variabili denominate in modo dinamico, non è abbastanza avere una buona maniglia per loro una volta che sono stati creati. Certo, ci sono modi per controllare i globali e gli ambiti locali per vedere cosa c'è. Ma il fatto è che dovresti avere un controllo definitivo su ciò che viene creato.

cosa si dovrebbe fare è metterli in un dizionario:

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

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

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

In questo modo non si sta creando variabili arbitrarie nello spazio dei nomi. Ora hai un dizionario di chiavi e oggetti come valori. È anche una lattina di worm per consentire a un input fornito dall'utente di guidare la denominazione di una variabile.

Per ulteriori informazioni, basta cercare qui per lo stesso argomento e vedere numerosi esempi del perché non si dovrebbe fare questo. Indipendentemente dagli esempi che vedete mostrarvi come utilizzare globals(), ecc., Vi preghiamo di prendere il mio consiglio e di non seguire questa strada. Ama e divertiti .. e forse abbraccia e bacia, il tuo dizionario.

Riferimenti:

+0

Grazie per l'aiuto! Forse non ero abbastanza preciso con la mia domanda però. So come assegnare valori ai campi di un oggetto in base all'input dell'utente, ma per quanto riguarda il nome effettivo dell'oggetto? – ShaunSoda

+0

Sì, devi essere molto più dettagliato quando chiedi aiuto qui. Stai parlando della rappresentazione dell'istanza quando stampi l'oggetto? Cosa intendi per "nome" dell'oggetto? – jdi

+0

Hehe. Scusa, come ho detto, sto solo imparando a programmare, quindi abbi pazienza con me. Quando crei un nuovo oggetto di classe, gli dai un nome. La mia classe si chiama Contatti, quindi se dovessi creare nuovi oggetti potrebbero essere chiamati contact1, contact2, ecc. Forse questi sono chiamati identificatori? Voglio nominare l'identificatore di ogni oggetto qualunque sia l'input dell'utente. – ShaunSoda

0

non si fanno chiaro perché si vuole creare un'istanza di oggetti di cui il nome è determinato come runtime come si desiderio. È importante rendersi conto che non è una pratica comune.

E 'possibile, anche se, utilizzando il comando incorporato setattr:

setattr(someobject, name, user) 

utilizzo Un po' più normale sarebbe quella di utilizzare un dizionario. Quindi se hai più di una istanza utente e vuoi memorizzarle, puoi memorizzarle in un dizionario come di seguito. Ciò consentirebbe di fare riferimento all'oggetto per nome.Uscita

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 

Esempio:

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

Sfortunatamente, questo non è stato quello che l'OP voleva. Ho fornito la stessa risposta e poi ho dovuto cambiarla. – jdi

+0

barf. anche importante è quello che gli altri impareranno dall'incapacità su questa domanda. –

+0

Grazie mille! Ha senso! – ShaunSoda

Problemi correlati