如何在ipython中重新加载类定义

7
由于我通常使用ipython来开发代码,所以我遇到了这样的情况:在将类导入到ipython后更改了类的代码。我想重新加载新的类定义而不必重新启动ipython。问题是ipython中的reload函数只适用于模块。
我搜索了解决此问题的方法,并找到了一个先前的线程:how to reload a Class in python shell?。但是,我按照那里的方法尝试了一下,但没有成功。我认为它能够在该线程中工作的原因是类名恰好与模块名相同,因此可以在sys.modules中找到并因此可以被删除。当类名与模块名不同时,该方法无法工作。
我想知道是否有解决此问题的方法。谢谢!
2个回答

6

是的,有一个IPython扩展名叫做“autoreload”,专门用于这种情况。这里是如何使用它的文档。


1
自动重新加载只适用于在调用自动重新加载后创建的类对象吗?我有一个类对象,其定义已更改。我尝试了自动重新加载,但对于该类对象并没有奏效。但是,在调用自动重新加载后创建另一个类对象时,新的类对象可以使用不断变化的代码进行更新。 - Wen
我不确定细节,但它很可能只适用于在启用自动重新加载后创建的内容。 - Thomas K

-1

您也可以重新加载单个模块

例如:

#reload every time  
import my_module
reload(my_module)

#reload a module recursively      
import deep_reload_my_module
dreload(deep_reload_my_module)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接