Partage
  • Partager sur Facebook
  • Partager sur Twitter

manipuler les modules avec __import__

    29 décembre 2015 à 16:51:19

    Bonjour, 

    je souhaiterai des éclaircissements sur les differentes manieres d'importer des modules.

    Ma problematique est la suivante :

    Je souhaite importer des modules, mais je ne connais ni leur nombre, ni leur nom, a l'avance. J'etais parti sur une methode qui ne me semble pas tres propre basee, sur du exec('import ...', mais j'ai decouvert entre temps __import__, qui me semble adapte a mes besoins. Je ne sais toutefois pas bien m'en servir.

    D'un cote, j'ai le fichier moduleToImport1.py, qui fait partie des fichiers que je souhaiterai importer et manipuler a la volee. En voici le contenu :

    ModuleToImport1(object):
        def __init__(self, name):
            pass

    D'un autre cote, j'ai le fichier qui appelle tous les modules de maniere dynamique :

    for m in modules:
        mod = __import__(m)
        

    Jusqu'ici, ca marche. Cependant, je souhaiterai pouvoir avoir quelque chose du genre :

    for m in modules:
        mod = from k __import__(*)
        reload(mod)
        obj = mod.mod.tilte()('nom')
        obj.method1()
        obj.method2()
                    

    Deja, le from .. __import__, je peux oublier, ca me renvoie une syntax error ! Ensuite, mod renvoie quelque chose qui n'est pas mon module, du coup je peux difficilement appeler le contenu de mod etant donne que je ne connais pas son namespace. Enfin, comment puis-je appeler mod.classInMod() sans avoir recours a exec ou eval ?

    Voila, toute explication la dessus sera la bienvenue, j'ai du mal a trouver des infos claires sur le sujet =[ N'hesitez pas a me faire savoir si ca manque de clarte, j'ai un peu de mal a expliquer ce probleme ! D'avance, merci

    système -> Darwin

    jeu d'instructions -> 64bit

    distribution -> Darwin Kernel Version 13.4.0: Wed Mar 18 16:20:14 PDT 2015; root:xnu-2422.115.14~1/RELEASE_X86_64

    version python -> 2.7.3

    • Partager sur Facebook
    • Partager sur Twitter
      30 décembre 2015 à 18:39:19

      J'ai trouve une soluce !

      classInModule = modToImport+'.'+modToImport.title()
      module_name, class_name = classInModule.split(".")
      mod = import_module(module_name)
      reload(mod)
      classInst = getattr(mod, class_name)()
      classInst.myMethod()
      

      voila !

      -
      Edité par fruity' 30 décembre 2015 à 18:39:40

      • Partager sur Facebook
      • Partager sur Twitter

      manipuler les modules avec __import__

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown