[Python] Funzioni come moduli

Daniele Varrazzo piro a develer.com
Lun 30 Giu 2008 18:02:18 CEST


<11f816ab0806291343p6222fcedy736975df8205b7db a mail.gmail.com>
<1214833299.8816.4.camel a learts-desktop> <20080630151445.GA28255 a ubuntu>
Message-ID: <efc633e57a1a60d6a359c2ecb715451d a develer.com>
X-Sender: piro a develer.com
Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Mon, 30 Jun
	2008 18:02:18 +0200
User-Agent: RoundCube Webmail/0.1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit



On Mon, 30 Jun 2008 17:14:45 +0200, Alessandro Dentella <sandro a e-den.it>
wrote:
> 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.

Il problema e' che usi un dizionario per ambiente globale che pero' poi
butti via.

Il codice seguente funziona come ci si aspetta:

In [1]: ENV = {}
In [3]: execfile('plugin_A.py', ENV)
In [5]: a = ENV['A']()
In [6]: a.test()

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com



Maggiori informazioni sulla lista Python