<[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> X-Sender: [EMAIL PROTECTED] Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Mon, 30 Jun 2008 15:56:54 +0200 User-Agent: RoundCube Webmail/0.1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit
On Mon, 30 Jun 2008 15:41:39 +0200, Leonardo <[EMAIL PROTECTED]> 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. Good > 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 xD Magari ci sono un po' troppe cose implicite :) forse sarebbe un design migliore cambiare la signature delle funzioni passandogli esplicitamente dei parametri in piu': sarebbe piu' facile da testare e migliore dal punto di vista del "principio del minimo stupore". Mi sembra di capire che tu fai execfile per sfruttare gli effetti secondari delle istruzioni eseguite. Se posso, ti suggerisco di creare dei moduli plugin che definiscano unicamente una funzione. Puoi "caricare" tutti i plugin all'avvio del programma o ad un certo evento e poi usare le funzioni dove servono. Puoi definire ad esempio che ogni plugin debba esportare una funzione handle_<qualcosa> con una signature prefissata - diciamo (self, server_response). All'atto di caricare i plugin puoi fare (untested, e senza error handling): env = {} execfile(my_file, env) for k, v in env.iteritems(): if k.startswith('handle_'): register_plugin(v) break else: complain("no plugin in this file") Se i plugin hanno la possibilita' di poter intervenire in diverse fasi del tuo processo, potresti definire una classe BasePlugin fornita dei diversi hook e implementare gli hook desiderati in ogni plugin. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python