2012-08-23 1 views
7

neuladen, da ich normalerweise Ipython verwenden, um mit Code in der Entwicklung zu spielen, stoße ich auf die Situation, wo ich den Code einer Klasse ändern, nachdem ich es in Ipython importieren. Ich möchte die neue Klassendefinition neu laden, ohne ipython neu zu starten. Das Problem ist, dass die Reload-Funktion in ipython nur mit Modulen funktioniert.Wie kann ich eine Klassendefinition in ipython

suchte ich die Lösung für dieses Problem und fand ein vorheriges Thema: how to reload a Class in python shell?

Allerdings habe ich die Ansätze folgte, aber es hat nicht funktioniert. Ich denke, der Grund, warum es in diesem Thread funktioniert, ist, dass der Klassenname mit dem Modulnamen identisch ist, so dass er in sys.modules gefunden werden kann und somit gelöscht werden kann. Wenn sich der Klassenname von dem Modulnamen unterscheidet, kann dieser Ansatz nicht funktionieren.

Ich frage mich, ob es eine Lösung für dieses Problem gibt. Vielen Dank!

Antwort

5

Ja, es gibt eine IPython-Erweiterung namens 'Autoreload' für genau diese Art von Sache. Here's the documentation zur Verwendung.

+0

Hat der Autonachlademode erst nach dem Autonachlademode erstellt für die Klassenobjekte arbeitet aufgerufen wird? Ich hatte ein Klassenobjekt, das die Definition geändert hatte. Ich habe das Autoreload versucht, aber für dieses Klassenobjekt hat es nicht geklappt. Wenn ich jedoch nach dem Aufruf von autoreload ein anderes Klassenobjekt erstellt habe, kann das neue Klassenobjekt mit dem Code aktualisiert werden, der sich ständig ändert. – Wen

+0

Ich bin mir nicht sicher über die Details, aber es funktioniert möglicherweise nur für Dinge, die erstellt werden, nachdem Autoreload aktiviert ist. –

-1

Sie können auch einzelne Modul

Zum Beispiel nachladen:

#reload every time 
import my_module 
reload(my_module) 

#reload a module recursively  
import deep_reload_my_module 
dreload(deep_reload_my_module)