Sono abbastanza nuovo per Python e hanno una domanda per quanto riguarda la seguente classe:Le migliori pratiche quando si definiscono le variabili di istanza
class Configuration:
def __init__(self):
parser = SafeConfigParser()
try:
if parser.read(CONFIG_FILE) is None:
raise IOError('Cannot open configuration file')
except IOError, error:
sys.exit(error)
else:
self.__parser = parser
self.fileName = CONFIG_FILE
def get_section(self):
p = self.__parser
result = []
for s in p.sections():
result.append('{0}'.format(s))
return result
def get_info(self, config_section):
p = self.__parser
self.section = config_section
self.url = p.get(config_section, 'url')
self.imgexpr = p.get(config_section, 'imgexpr')
self.imgattr1 = p.get(config_section, 'imgattr1')
self.imgattr2 = p.get(config_section, 'imgattr2')
self.destination = p.get(config_section, 'destination')
self.createzip = p.get(config_section, 'createzip')
self.pagesnumber = p.get(config_section, 'pagesnumber')
E 'OK per aggiungere più variabili di istanza in un'altra funzione, get_info
in questo esempio, o è buona pratica definire tutte le variabili di istanza nel costruttore? Non potrebbe portare a codice spaghetti se definisco nuove variabili di istanza ovunque?
MODIFICA: sto usando questo codice con un semplice raschietto per le immagini. Via get_section
Riporto tutte le sezioni nel file di configurazione, quindi eseguo l'iterazione per visitare ogni sito da cui scarto immagini. Per ogni iterazione faccio una chiamata a get_section
per ottenere le impostazioni di configurazione per ogni sezione nel file di configurazione. Se qualcuno riesce a trovare un altro approccio, andrà tutto bene! Grazie!
http://stackoverflow.com/questions/2964230/python-how-should-i-make-instance-variables-available –
Il 'self.__parser = None' dovrebbe essere impostato all'inizio di '__init __()'. Il motivo è che il '__init __()' è chiamato come un primo esempio di oggetto * già esistente *. Se il parser non riesce a leggere il file di configurazione e solleva l'eccezione, l'eccezione può essere rilevata da elswhere (il programma potrebbe non essere terminato). Quindi l'oggetto della classe 'Configuration' esiste ancora e il successivo' get_info() 'causerà l'errore * AttributeError: Configuration non ha attributo '__parser'. – pepr
@pepr Dovrei leggere la tua risposta nel modo in cui dovrei aggiungere 'self .__ parser = None' all'inizio di' __init __. Py' o suggerisci di spostare l'inizializzazione del parser da '__init __. Py' a un'altra funzione? – happygoat