2009-10-05 19 views
10

Sto imparando Python e, come sempre, sono ambizioso con i miei progetti di avviamento. Sto lavorando su un sistema di plugin per un toolkit del sito della community per App Engine. La mia superclasse plugin ha un metodo chiamato install_path. Vorrei ottenere il __path__ per il __module__ per self (che in questo caso sarà la sottoclasse). Il problema è che __module__ restituisce un valore str anziché l'istanza del modulo stesso. eval() è inaffidabile e indesiderabile, quindi ho bisogno di un buon metodo per mettere le mani sull'istanza del modulo reale che non coinvolge lo strstr torno da __module__.Come ottengo l'istanza del modulo per una classe in Python?

risposta

11

Il sys.modules dict contiene tutti i moduli importati, in modo da poter utilizzare:

mod = sys.modules[__module__] 
1

Come circa Importing modules

X = __import__(‘X’) opere come import X, con la differenza che si 1) passa il nome del modulo come una stringa, e 2) assegnare esplicitamente a una variabile nello spazio dei nomi corrente.

È possibile passare il nome del modulo (anziché "X") e richiamare l'istanza del modulo. Python assicurerà di non importare lo stesso modulo due volte, quindi dovresti recuperare l'istanza che hai importato in precedenza.

+0

Bene, questo sembra funzionare. Spero un po 'per una soluzione più pulita, ma se nient'altro arriva, lo accetto. –

+0

Si noti che se si esegue '__import __ ('foo.bar')', verrà restituito il modulo 'foo', non' foo.bar'. Vedi i documenti '__import__' per i dettagli. –

+0

Beh, ci sono un paio di buoni motivi per cui la soluzione di Lukas è molto meglio. –

Problemi correlati