2010-10-12 10 views
6

Ho visto la gente usa scimmia-patching per impostare le opzioni di un modulo, ad esempio:Python: Qual è il modo consigliato per impostare le impostazioni di configurazione per un modulo quando lo si importa?

importazione mymodule
mymodule.default_img = "/my/file.png"
mymodule .view_default_img()

E Django, per esempio, ha settings.py per l'intera Django app, e mi gratifica sempre un po '.

Quali sono gli altri modi per gestire le impostazioni di configurazione su un modulo? Cosa è raccomandato? Sembra che spesso non ci sia un modo carino per configurare la configurazione a livello di modulo.

Ovviamente, evitando completamente la configurazione è di gran lunga il più preferibile, ed è generalmente preferibile utilizzare le classi, o passare l'argomento a una funzione. Ma a volte non si può evitare di avere impostazioni di qualche tipo, e qualche volta ha davvero senso avere impostazioni globali a livello di modulo solo per comodità (per esempio, il sistema di template di Django - dovendo specificare il percorso di base per ogni modello sarebbe un incubo, sicuramente non buono codice DRY).

risposta

3

Una possibilità è il modulo ConfigParser. Potresti avere le impostazioni in un file di configurazione non python e fare in modo che ogni modulo ne rileggi le impostazioni. Un'altra opzione è quella di avere un metodo di configurazione in ogni modulo che il codice client possa trasmettere anche agli argomenti.

# foo.py 
setting1 = 0 
setting2 = 'foo' 

def configure(config1, config2): 
    global setting1, setting2 

    setting1 = config1 
    setting2 = config2 

Poi nel modulo di importazione,

import foo 

foo.configure(42, 'bar') 

Personalmente, penso che il modo migliore per farlo è con il file di impostazioni come Django.

+0

Personalmente, penso che il peggior modo di fare sia con un file di impostazioni come django. Ma +1 per menzionare ConfigParser. –

+2

In realtà, probabilmente non ho pronunciato la mia domanda molto bene. Quando ho detto "impostazioni di configurazione per un modulo" intendevo all'interno di Python. Quindi, forse una domanda migliore: quando si importa un modulo, qual è il modo migliore per impostare lo stato/i parametri a livello di modulo in fase di esecuzione, all'interno di Python? Ad esempio, quando istanziate una classe, un modo pietonico comune per impostare lo stato a livello di classe è con i parametri della funzione __init__. Qual è la funzione __init__ per un modulo? – bryhoyt

+1

E, più precisamente (dato che è facile inserire il codice runtime direttamente nel modulo, come una funzione __init__), come faccio a passare i parametri alla funzione "__init__" dei moduli? – bryhoyt

Problemi correlati