[Python] python plugin pattern
Daniele Varrazzo
piro a develer.com
Mar 6 Mar 2007 20:46:49 CET
Iacopo Masi ha scritto:
> Salve,
> scrivo per sapere se esiste una guida o un libro che indichi come poter
> sviluppare un' applicazione grafica python estendibile attraverso l'uso
> di plugin o (appunto) estensioni.
> Non sono alla ricerca di codice puro in quando per ora non ho
> controllato per bene se esiste già qualcosa di spiegato, ma magari
> speravo che qualcuno di voi laggiù potesse consigliarmi qualche design
> pattern. (ne ho applicati qualcuno in C++, combinandoli appena insieme
> ex. singleton, state...).
> Per ora sui pattern in python ho trovato solo questo [1] documento.
> Qualcuno saprebbe consigliarmi qualche idioms/pattern per implementare
> estendibiità in python?
Implementare un meccanismo di estensioni in Python è estremamente facile. Un
possibile modo è quello di stabilire che tutte le estensioni saranno moduli
(file .py) salvati in una certa directory, per esempio "plugins".
A runtime, da Python è molto facile verificare cosa ci sia in quella directory
ed andare alla ricerca di qualcosa per cui hai stabilito una convenzione, per
esempio una funzione entry point dal nome prestabilito oppure una classe che
sia sottoclasse di una classe "Plugin" che l'applicazione ha messo a
disposizione di base.
Il meccanismo chiave da usare, al di là della convenzione che deciderai, è la
valutazione dinamica del codice: usando la funzione "execfile(nomefile,
namespace)" [1] il file "nomefile" verrà eseguito e gli oggetti creati (anche
le definizioni di classi e funzioni) verranno depositati nel dizionario
"namespace", dal quale puoi comodamente evedere se esiste una funzione con un
dato nome o una sottoclasse di una data classe.
Ho utilizzato una cosa del genere (con le classi) in un programmino che ho
scritto all'università, scaricabile da http://sadic.sourceforge.net. Puoi dare
un'occhiata ai sorgenti, anche da svn: i plugin sono caricati dalla funzione
sadic.viewer.load_plugin(); i plugin disponibili sono nella directory
sadic/plugin.
Per altre info su pattern implementati in Python, c'è il Thinking in Python
[2] che forse potrebbe contenere info interessanti (se non altro per vedere la
differenza implementativa che potrebbe esserci tra Python e ad es. C++, che in
certi casi, come per il pattern "Visitor", potrebbe essere enorme)
Spero aiuti. Ciao!
[1] http://docs.python.org/lib/built-in-funcs.html
[2] http://www.mindview.net/Books/TIPython
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python