[Python] Funzioni come moduli

Domenico Chierico spaghetty a gmail.com
Dom 29 Giu 2008 19:12:04 CEST


On Sun, 2008-06-29 at 15:54 +0200, Leonardo wrote:

> Quindi mi sarebbe d'aiuto un buon metodo per importare moduli a seconda
> di una variabile, o altri modo per definire ed utilizzare funzioni in
> files esterni al "cuore" del programma.
> Grazie per le eventuali risposte :)

credo che quello che tu stai cercando e' proprio la funzione __import__
che ti permette di importare un modulo dal suo nome.

Io personalmente risolvo questo tipo di problema usando una directory
come modulo dei plugin, quindi all'avvio dell'applicazione cerco i file
all'interno di quella directory e da questi vi importo le classi (senza
istanziarle e creo un indice degli oggetti, per associare a questi delle
regole di attivazione (come nel tuo caso) uso un metodo di classe che mi
ritorna la chiave di selezione per quello specifico oggetto.

eccoti un breve esempio:

tmp = [ i for i in os.listdir("Actions") if i.endswith(".py")]
   self.handlers = {}
   for i in tmp:
       cname = i[0:-3]
       module = __import__("Actions."+cname, globals(),locals(),["*"])
       mtclass = getattr(module,cname)
       self.handlers[mtclass.getRule()]= mtclass

PS. il codice non e' testato prendilo giusto come esempio :)
getRule e' un metodo di classe che dovresti implementare in ogni oggetto



Maggiori informazioni sulla lista Python