[Python] Funzioni come moduli

Alessandro Dentella sandro a e-den.it
Lun 30 Giu 2008 17:14:45 CEST


On Mon, Jun 30, 2008 at 03:41:39PM +0200, Leonardo wrote:
> Alla fine ho risolto con execfile, č incredibile: esegue un file come se
> fosse all'interno del file chiamante, passandogli tutte le variabile, le
> funzioni, e le classi esistenti.
> L'unica cosa č che adesso un modulo č cosė ad esempio:
> 
> file rejoin.py:
> 
> #! /usr/bin/python
> # -*- coding: UTF-8 -*-
> user, mode, chan, request = self.get_params(server_response)
> if self.Bot.nick in server_response:
> 	print "Sono stato kikkato!"
> 	self.Bot.join(chan)
> 	self.send(self.response, chan)
> 
> E fa un po' senso vederlo cosė, con praticamente tutte le variabili e
> funzioni non dichiarate nč passate come argomento eppure funzionanti.
> Ovvio che se lo lancio direttamente solleva decine di errori x


c'č un altro aspetto che non mi piace di execfile. Proprio il mese scorso
sono passato da execfile a __import__ in un set di test il cui principio č
uguale a quello dei plugin.

il "problema" č negli import. Supponi di avere un plugin cosė::

    import sys
    
    class A(object):
        def test(self):
            print sys.path
    
    
e di volerlo usare cosė

    LOCS = {}
    execfile('plugin_A.py', {}, LOCS)
    
    a = LOCS['A']()
    a.test()
    

ti verrā sollevato l'errore che perchč 'a' non vede __pių__ il modulo sys.
E non mi pare una soluzione dire che assieme ad A importo tutto nel mio
programma principale. 

Ovviamente funzionerebbe se facessi l'import direttamente nel metodo, ma io
lo consideravo troppo particolare e esposto ad errori.

sandro
*:-)



Maggiori informazioni sulla lista Python