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

如何在ipython中重新加载类定义,ipython,Ipython,由于我通常使用ipython来处理正在开发的代码,因此我遇到了这样的情况:在将类导入ipython之后,我更改了它的代码。我想在不重新启动ipython的情况下重新加载新的类定义。问题是ipython中的重载函数仅适用于模块 我搜索了此问题的解决方案并找到了以前的线程: 然而,我遵循了那里的方法,但它不起作用。我认为它在该线程中工作的原因是类名恰好与模块名相同,因此它可以在sys.modules中找到,因此可以删除。当类名与模块名不同时,该方法无法工作 我想知道这个问题是否有解决办法。谢谢 是

由于我通常使用ipython来处理正在开发的代码,因此我遇到了这样的情况:在将类导入ipython之后,我更改了它的代码。我想在不重新启动ipython的情况下重新加载新的类定义。问题是ipython中的重载函数仅适用于模块

我搜索了此问题的解决方案并找到了以前的线程:

然而,我遵循了那里的方法,但它不起作用。我认为它在该线程中工作的原因是类名恰好与模块名相同,因此它可以在sys.modules中找到,因此可以删除。当类名与模块名不同时,该方法无法工作


我想知道这个问题是否有解决办法。谢谢

是的,有一个叫做“autoreload”的IPython扩展,正是针对这类事情。关于如何使用它。

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

例如:

#reload every time  
import my_module
reload(my_module)

#reload a module recursively      
import deep_reload_my_module
dreload(deep_reload_my_module)

autoreload是否仅适用于调用autoreload后创建的类对象?我有一个类对象,它的定义已经更改。我尝试了自动加载,但对于该类对象无效。但是当我在调用autoreload后创建另一个类对象时,新的类对象可以用不断变化的代码进行更新。我不确定细节,但它可能只适用于启用autoreload后创建的对象。