[Python] Istanziare oggetti dinamicamente
Sbaush
sbaush a gmail.com
Lun 16 Apr 2007 15:15:15 CEST
Intanto grazie mille per le prontissime risposte alla mia richiesta...
Le vostre soluzioni funzionano entrambe se provate in terminale.
Non riesco però ad applicarle al mio preciso ambito, per questo entro
con voi nel merito della questione più in profondo.
Ho una directory con dei plugins, che vorrei riuscire a caricare dinamicamente.
Eseguo l'import dinamico cercando nel filesystem le cartelle; ogni
cartella ha al suo interno un file __init__.py che dovrebbe procedere
all'inclusione del file principale del plugin, che si chiama
NomePlugin.py.
Il codice dedito a questo è
__import__(PF.pluginName, globals(), locals(), [])
In PF.pluginName c'è la stringa con il nome del plugin e quindi della
file .py da importare.
Mi piacerebbe anche istanziare la classe principale all'interno del
file, che si chiama, con un guizzo di fantasia, NomePlugin.
Al momento faccio
NomePlugin.NomePlugin(parametro) (supponendo appunto che sia file
principale che classe si chiamino NomePlugin
vorrei dinamicizzare il tutto ed ho provato con
globals()[PF.pluginName](PF.pluginName)
Traceback (most recent call last):
File "./AirNMS.py", line 58, in ?
app = AirNMS(0)
File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/_core.py",
line 7700, in __init__
self._BootstrapApp()
File "/usr/lib/python2.4/site-packages/wx-2.6-gtk2-unicode/wx/_core.py",
line 7352, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "./AirNMS.py", line 53, in OnInit
frame = MainView.MainView(None, -1, 'AirNMS')
File "/home/sbaush/Projects/airspot/trunk/MainView.py", line 34, in __init__
sectionDirector.createAllPlugin()
File "/home/sbaush/Projects/airspot/trunk/SectionDirector.py", line
71, in createAllPlugin
self.sectionsReferences[eachSection].createPlugin()
File "/home/sbaush/Projects/airspot/trunk/Section.py", line 51, in
createPlugin
self.pluginReferences[eachPlugin]=self.pluginFactory.getPlugin(self.basePath,self.name,eachPlugin)
File "/home/sbaush/Projects/airspot/trunk/PluginFactory.py", line
22, in getPlugin
__import__(self.basePath+'.'+self.sectionName+'.'+self.pluginName)
File "/home/sbaush/Projects/airspot/trunk/sections/Monitor/MapPlugin/__init__.py",
line 8, in ?
globals()[PF.pluginName](MapPlugin)
TypeError: 'module' object is not callable
Ho provato anche con vars al posto di globals, ma il risultato è stato
lo stesso...
Cosa posso fare?
Sono riuscito a spiegarmi?
--
Marco Meoni (Sbaush)
Maggiori informazioni sulla lista
Python