Ho un programma che sto scrivendo in Python che effettua le seguenti operazioni:I metodi verbose __init__ in Python sono errati?
L'utente inserisce il nome di una cartella. All'interno di questa cartella sono presenti 8-15 file .dat con diverse estensioni.
Il programma apre quei file dat, li inserisce in un database SQL e consente all'utente di selezionare diverse modifiche apportate al database. Quindi il database viene esportato nei file .dat. Ci sono circa 5-10 diverse operazioni che potrebbero essere eseguite.
Il modo in cui avevo pianificato di progettare questo era creare una classe standard per ogni gruppo di file. L'utente dovrebbe inserire il nome della cartella e un oggetto con determinati attributi (nomi di file, dizionario di file, versione di file (ci sono diverse versioni), ecc). Determinare questi attributi richiede l'apertura di alcuni di questi file, la lettura di nomi di file, ecc.
Questa azione deve essere eseguita nel metodo __init__
? O questa azione dovrebbe essere svolta in diversi metodi di istanza che vengono richiamati nel metodo __init__
? O questi metodi dovrebbero essere da qualche altra parte, e devono essere chiamati solo quando l'attributo è richiesto altrove nel programma?
Ho già scritto questo programma in Java. E avevo un costruttore che chiamava altri metodi nella classe per impostare gli attributi dell'oggetto. Ma mi stavo chiedendo quale sarebbe la pratica standard in Python.
Essenzialmente ho un gruppo di file che possono essere classificati come "lavoro". Diverse funzioni eseguono diverse azioni su questo lavoro per produrre il risultato desiderato del programma. Questo è il motivo per cui ho pensato che fosse meglio tenerlo come classe. –
E sembra che questo è quello che stai suggerendo: __init __ (self, nomecartella): self.filelist = getfilelist (...); self.fileversion = getfileversion (...); ecc.? Tranne nell'istanza che uno dei metodi è costoso e necessario solo in determinati casi? –
Se questo è ciò che fa il tuo codice, allora forse dovresti usare [proprietà pigri] (http://stackoverflow.com/q/3012421/1235039). Ci sono molti modi per farlo, dipende solo dalle tue esigenze e preferenze. – aquavitae