2012-08-23 20 views
7

dato che di solito uso ipython per giocare con il codice in fase di sviluppo, mi imbatto nella situazione in cui cambio il codice di una classe dopo che l'ho importata in ipython. Voglio ricaricare la nuova definizione di classe senza riavviare ipython. Il problema è che la funzione di ricarica in ipython funziona solo con i moduli.Come posso ricaricare una definizione di classe in ipython

ho cercato la soluzione a questo problema e trovato un thread precedente: how to reload a Class in python shell?

Tuttavia, ho seguito gli approcci lì, ma non ha funzionato. Penso che il motivo per cui funziona in quel thread è che il nome della classe è lo stesso con il nome del modulo, quindi può essere trovato in sys.modules e quindi può essere cancellato. Quando il nome della classe è diverso dal nome del modulo, tale approccio non può funzionare.

Mi chiedo se esiste una soluzione a questo problema. Grazie!

risposta

5

Sì, c'è un'estensione IPython chiamata "autoreload" esattamente per questo genere di cose. Here's the documentation su come usarlo.

+0

Condivide l'autoreload funziona solo per gli oggetti di classe creati dopo l'autoreload viene richiamato? Ho avuto un oggetto di classe che la definizione era stata cambiata. Ho provato il caricamento automatico ma non ha funzionato per quell'oggetto di classe. Ma quando ho creato un altro oggetto di classe dopo aver richiamato il caricamento automatico, il nuovo oggetto di classe può essere aggiornato con il codice che cambia costantemente. – Wen

+0

Non sono sicuro dei dettagli, ma potrebbe funzionare solo per le cose create dopo l'abilitazione automatica. –

-1

È possibile anche ricaricare singolo modulo

Ad esempio:

#reload every time 
import my_module 
reload(my_module) 

#reload a module recursively  
import deep_reload_my_module 
dreload(deep_reload_my_module) 
Problemi correlati