2009-07-03 7 views
2

J'essaie d'apprendre comment Python recharge des modules, mais a atteint un roadblock. Disons que j'ai:Comment recharger un module Python importé dans un autre fichier?

dir1\file1.py:

from dir2.file2 import ClassOne 
myObject = ClassOne() 

dir1\dir2\file2.py:

class ClassOne(): 
    def reload_module(): 
     reload(file2) 

L'appel reload ne parvient pas à trouver le module "fichier2".

Ma question est, comment puis-je faire correctement, sans avoir à tout garder dans un fichier?

Une question connexe: Lorsque le rechargement fonctionne, myObject utilisera-t-il le nouveau code?

merci

+3

Il y a peu d'utilité pour le rechargement. Qu'essayez-vous de faire? –

+0

S.Lott a raison, vous devriez expliquer un peu plus ce qu'est votre cas réel, parce que l'exemple de code ressemble à quelque chose que vous ne voudriez pas faire. – balpha

+0

Fondamentalement, ce que je veux faire est d'avoir des objets exécutant le code dans les fenêtres d'édition, que l'utilisateur peut modifier pendant que le système est en cours d'exécution. Les objets auraient une fonction régulière "step()" appelée, où l'utilisateur devrait changer le code. Cela modifiera le comportement des objets lors de l'exécution du programme. – user129975

Répondre

3
def reload_module(): 
     import file2 
     reload(file2) 

Cependant, cela ne en soi changer le type d'objets que vous avez instancié des classes tenues dans la version précédente de fichier2. Le Python Cookbook 2ème édition a une recette sur la façon d'accomplir de tels exploits, et il est beaucoup trop long et complexe dans le code et la discussion à reproduire ici (je crois que vous pouvez le lire sur google book recherche, ou à défaut version [avant que toutes les améliorations que nous avons apportées à elle], au moins, devrait toujours être sur le site de l'activestate cookbook en ligne).

+0

reload a besoin d'un objet module ; import lie cet objet module dans la portée de dénomination actuelle. Essentiellement, un module fichier2 contenant ce code est capable de se "rafraîchir en mémoire" sur demande (si la source a été changée), net du problème avec les objets instanciés avec les classes des versions précédentes, que j'ai mentionnées dans ma réponse. –

+0

Désolé, je venais juste de supprimer ma question (après que cela soit devenu clair pour moi). J'ai essentiellement demandé ce que le point de cette importation deux fois de suite (ce qu'il n'est pas vraiment) serait. – balpha

+0

Merci Alex. J'ai essayé ceci et cela fonctionne, dans la mesure où il ne jette aucune erreur. J'ai encore besoin de recharger ces objets d'une manière ou d'une autre. J'ai remarqué que tu as écrit ce livre. Cool...! – user129975

Questions connexes