2011-01-01 14 views
6

Questa è una domanda molto basilare su OOP (sto usando Python ma in realtà è una domanda concettuale quindi non proprio specifica del linguaggio). Mi sono guardato intorno ma nessun tutorial o libro copre questa specifica domanda. Se non sono chiaro, mi scuso e sarei felice di chiarire qualsiasi cosa abbia scritto.Domanda concettuale del principiante su OOP e persistenza

Diciamo che sto creando una semplice rubrica che voglio scrivere su disco usando pickle. Ho una classe chiamata Contact dove __init__ accetta alcuni argomenti (firstName e lastName) e ho un menu in cui puoi creare contatti, modificarli ecc. Per tutti gli esempi di OOP ho visto che farebbero qualcosa come ...

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith') 

... per creare nuove istanze di Contatto. Ma questi sono tutti definiti prima del runtime. Cosa succede quando voglio tutte queste istanze create al volo dall'input dell'utente? Creo nuove istanze per ogni persona? Come farei questo dall'input dell'utente? Quindi basta scrivere tutte le istanze in una lista e metterle sott'aceto? O fai una cosa del genere ...

firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")  
contact = Contact(firstName, lastName) 

... poi basta aggiungere il contatto alla lista e ottenere nuovi valori per l'istanza di contatto ogni volta che voglio aggiungere un utente? Questo è un concetto chiave che non sto ottenendo davvero (perché non l'ho visto spiegarlo davvero da nessuna parte). Tutti gli esempi che ho visto non fanno quanto sopra, ma creano nuove istanze per ogni cosa/persona, ma sono tutte predefinite e non create al volo. Sarei davvero grato che qualcuno mi spiegasse questo concetto.

risposta

1

Sì, generalmente è come lo si fa: creare array di oggetti. O qualche altro tipo di collezioni, a seconda della lingua e/o del framework. Quando crei un nuovo oggetto, lo crei prima in una variabile temporanea e poi lo inserisci nella tua raccolta.

A volte, quando si dispone di un sacco di oggetti, non li si carica tutti in una volta dalla memoria persistente (come un DB o un file). Basta caricare quello (o pochi) con cui è necessario lavorare. Se ne carichi uno solo, potrebbe ottenere una variabile speciale. Molti riceveranno di nuovo una collezione.

+0

Esiste comunque la possibilità di rendere i dati immessi il nome dell'istanza? O è del tutto inutile? O anche possibile? Sto pensando a qualcosa come dire ... firstName = raw_input ("Qual è il tuo nome ?: ") lastName = raw_input (" Qual è il tuo cognome ?:") eval (firstName) = Contatto (firstName, lastName) – johnharris85

+1

@JHarris - che dipende dalla lingua. PHP e Javascript potrebbero farlo. C++/C# non poteva. Tuttavia, non penso che questo sia il modo giusto di pensare. Se si desidera cercare i contatti per nome, utilizzare un tipo di raccolta "dizionario" ("mappa" in alcune lingue). Inquinare lo spazio dei nomi con variabili per ogni contatto come questo sarebbe dispendioso e persino pericoloso (cosa succede se qualcuno crea un contatto con il nome come una delle tue variabili?) –

3

Il tuo esempio è esattamente come funziona.