Danke für die vielen Antworten.
Jetzt habe ich, wie jens schon andeutete, das problem das der Klassenname nur als String vorliegt.
Und ich möchte, das der Module Namespaceverfügbar ist.
also in etwa so:
Code: Alles auswählen
for file in files:
__import__(file,globals(),locals(),[])
das modul soll danach aber über
"mymodule"."myclass" ansteuerbar sein, da ich versuche plugins zu laden müssen die klassen des moduls erreichbar sein mittels "file.class_a".
(Primär, muss das Modul seine eigenen klassen (z.b. MyException) kennen.)
from x import * ist ungünstig weil sich dann ja evtl manche klassen überschreiben könnten.
Hoffe das ist halbwegs verständlich was ich versuche
EDIT::
Probiert habe ich eben das:
Code: Alles auswählen
>>> dummystr = "dummy"
>>> sys.modules[dummystr] = __import__(dummystr,globals(),locals(),[])
>>> o = dummy.class1()
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
NameError: name 'dummy' is not defined
>>> import dummy
>>> o = dummy.class1()
Geht leider auch nicht wenn ich das in modules eintrage
EDIT2:
Hier ein test von c:\dummy.py, enthält die klasse dummy, und die klasse class1. Es funktioniert. Ob es die beste Lösung ist bezweifel ich aber, was meint ihr dazu ?
Code: Alles auswählen
>>> import sys
>>> sys.path.append("c:\\")
>>> dummystr = "dummy"
>>> sys.modules[dummystr] = __import__(dummystr,globals(),locals(), [])
>>> o = getattr(sys.modules.get(dummystr), dummystr)()
>>> o.getname()
'dummy'
>>> o.instanciate_class1()
class1
>>>