2009-10-05 8 views
10

J'apprends Python, et comme toujours, je suis ambitieux avec mes projets de démarrage. Je travaille sur un système de plugin pour un toolkit de site communautaire pour App Engine. Mon superclasse plugin a une méthode appelée install_path. Je voudrais obtenir le __path__ pour le __module__ pour self (qui dans ce cas sera la sous-classe). Le problème est, __module__ renvoie un str plutôt que l'instance de module elle-même. eval() est peu fiable et indésirable, donc j'ai besoin d'un bon moyen de mettre la main sur l'instance réelle du module qui n'implique pas eval ling the str Je reviens de __module__.Comment obtenir l'instance de module pour une classe en Python?

Répondre

11

Le sys.modules dict contient tous les modules importés, de sorte que vous pouvez utiliser:

mod = sys.modules[__module__] 
1

Que diriez-vous Importing modules

X = __import__(‘X’) fonctionne comme import X, avec la différence que vous 1) passer le nom du module sous forme de chaîne, et 2) attribuer explicitement à une variable dans votre espace de noms actuel.

Vous pouvez passer le nom du module (au lieu de 'X') et récupérer l'instance du module. Python veillera à ne pas importer deux fois le même module. Vous devriez donc récupérer l'instance que vous avez importée précédemment.

+0

Eh bien, cela semble fonctionner. J'ose espérer une solution plus propre, mais si rien d'autre ne se présente, je l'accepterai. –

+0

Notez que si vous faites __import __ ('foo.bar') ', cela retournera le module' foo', pas 'foo.bar'. Voir les documents '__import__' pour plus de détails. –

+0

Eh bien, il y a quelques bonnes raisons pour lesquelles la solution de Lukas est bien meilleure. –

Questions connexes