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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python