2012-08-23 8 views
7

od Zwykle używam ipython się bawić z kodem fazie rozwoju, I natknąć się na sytuację, w której mogę zmienić kod klasy po importować go do ipython. Chcę ponownie załadować definicję nowej klasy bez restartowania ipython. Problem polega na tym, że funkcja przeładowania w ipythonie działa tylko z modułami.Jak mogę przeładować definicję klasy w ipython

Szukałem rozwiązania tego problemu i znalazłem poprzedni wątek: how to reload a Class in python shell?

Jednak następnie podejść tam, ale to nie działa. Myślę, że powód, dla którego działa w tym wątku, jest taki, że nazwa klasy okazała się taka sama z nazwą modułu, więc można ją znaleźć w sys.modules i tym samym można ją usunąć. Gdy nazwa klasy różni się od nazwy modułu, to podejście nie działa.

Zastanawiam się, czy istnieje rozwiązanie tego problemu. Dzięki!

Odpowiedz

5

Tak, jest przedłużeniem ipython zwany „autoreload” dokładnie tego rodzaju rzeczy. Here's the documentation o tym, jak z niego korzystać.

+0

Czy autoreload działa tylko dla obiektów klasy powstałych po autoreload jest wywoływana? Miałem obiekt klasy, że definicja została zmieniona. Próbowałem autoreload, ale nie wyszło dla tego obiektu klasy. Ale kiedy utworzyłem inny obiekt klasy po wywołaniu autoreload, nowy obiekt klasy może zostać zaktualizowany za pomocą kodu, który stale się zmienia. – Wen

+0

Nie jestem pewien szczegółów, ale może to działać tylko dla rzeczy stworzonych po włączeniu automatycznego ładowania. –

-1

Można również odświeżyć pojedynczy moduł

Na przykład:

#reload every time 
import my_module 
reload(my_module) 

#reload a module recursively  
import deep_reload_my_module 
dreload(deep_reload_my_module) 
Powiązane problemy