
Hi Bastian, versuchs mal mit sowas wie: def loadPlugin( name ): return getattr( __import__( name ), name ) Mit ein wenig error handling sollte es das schon tun. Bis denne, Gerald Bastian Venthur schrieb:
Super, das geht ja sogar noch viel schneller. Danke!
Gibts jetzt noch was äquivalentes um die gleichnamige Klasse aus dem Modul zu bekommen?
Angenommen, jedes Modul enthält eine Gleichnamige Klasse (die wie gesagt alle von der gleichen Klasse abstammen).
Jetzt hab ich das Modul Foo dynamisch geladen, aber wie bekomme ich dynamisch ein Objekt Foo.Foo ohne exec zu bemühen?
Schöne Grüße,
Bastian
On 15.11.2007 15:20 schrieb Gerald Klix:
Hi, das geht ganz einfach, indem man die eingebaute Funktion __import__ verwendet. Es ist sogar so, daß import seinerseits wiederum auf __import__ basiert.
Siehe: http://docs.python.org/lib/built-in-funcs.html
HTH, Gerald
Bastian Venthur schrieb:
Hi Liste,
Was ist der eleganteste Weg um dynamisch Module aus einem Paket nachzuladen wenn die Modulnamen erst zur Laufzeit feststehen?
Als uneleganteste Lösung könnte man bei Programmstart alle Module eines Paketes laden (wobei zur Zeit der Programmierung die Namen noch nicht feststehen), also sowas wie
import paket.* oder from paket import *
was ja leider nicht geht.
Besser wäre wenn bei Nutzereingabe der string genommen wird und sowas wie
from paket import eingabe
das könnte man mit exec sicher noch irgendwie machen, aber kennt jemand ne elegantere Lösung?
Hintergrund ist eine Nutzanwendung in dem in einem Paket nur Module sind die eine Klasse enthalten die alle von der selben Klasse abgeleitet sind. Je nach Nutzereingabe soll die jeweilige Klasse geladen werden. Sowas wie ein Plugin-System eben. Schön wäre es auch wenn man bei neuer Eingabe das alte Modul wieder entladen könnte...
Schöne Grüße,
Bastian
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de