2009-10-05 4 views
10

Ich lerne Python, und wie immer bin ich ehrgeizig mit meinen Startprojekten. Ich arbeite an einem Plugin-System für ein Community-Toolkit für App Engine. Meine Plugin-Superklasse hat eine Methode namens install_path. Ich möchte die __path__ für die __module__ für self erhalten (was in diesem Fall die Unterklasse sein wird). Problem ist, __module__ gibt eine str anstelle der Modulinstanz zurück. eval() ist unzuverlässig und unerwünscht, so brauche ich eine gute Möglichkeit, meine Hände auf die eigentliche Modul-Instanz, die keine eval Ling die str Ich komme zurück von __module__.Wie bekomme ich die Modul-Instanz für eine Klasse in Python?

Antwort

11

Die sys.modules dict enthält alle importierten Module, so können Sie verwenden:

mod = sys.modules[__module__] 
1

Wie wäre es Importing modules

X = __import__(‘X’) Werke wie import X, mit dem Unterschied, dass man 1) die Modulnamen als String übergeben, und 2) ausdrücklich ein in Ihrem aktuellen Namespace Variable zuweisen.

Sie könnten den Modulnamen (anstelle von 'X') übergeben und die Modulinstanz zurückholen. Python stellt sicher, dass Sie das gleiche Modul nicht zweimal importieren, daher sollten Sie die Instanz, die Sie zuvor importiert haben, zurückholen.

+0

Nun, das scheint zu funktionieren. Ich hoffe irgendwie auf eine sauberere Lösung, aber wenn nichts anderes kommt, werde ich es akzeptieren. –

+0

Beachten Sie, dass wenn Sie '__import __ ('foo.bar')', es das 'foo' Modul zurückgibt, nicht' foo.bar'. Weitere Informationen finden Sie in den '__import__' -Dokumenten. –

+0

Nun, es gibt ein paar gute Gründe, warum Lukas Lösung viel besser ist. –

Verwandte Themen