【问题标题】:How can I reload a class definition in ipython如何在 ipython 中重新加载类定义
【发布时间】:2012-08-23 05:50:07
【问题描述】:

由于我通常使用 ipython 来玩正在开发中的代码,所以我遇到了将一个类的代码导入 ipython 后更改它的情况。我想在不重新启动 ipython 的情况下重新加载新的类定义。问题是 ipython 中的 reload 函数仅适用于模块。

我搜索了这个问题的解决方法,找到了一个之前的帖子: how to reload a Class in python shell?

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

我想知道这个问题是否有解决方案。谢谢!

【问题讨论】:

    标签: ipython


    【解决方案1】:

    是的,有一个名为“autoreload”的 IPython 扩展正是用于此类事情的。 Here's the documentation如何使用它。

    【讨论】:

    • 自动重载是否只对调用自动重载后创建的类对象有效?我有一个定义已更改的类对象。我尝试了自动重新加载,但它不适用于该类对象。但是当我在调用 autoreload 后创建另一个类对象时,新的类对象可以使用不断变化的代码进行更新。
    • 我不确定细节,但它可能只适用于启用自动重载后创建的东西。
    【解决方案2】:

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

    例如:

    #reload every time  
    import my_module
    reload(my_module)
    
    #reload a module recursively      
    import deep_reload_my_module
    dreload(deep_reload_my_module)
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2016-05-04
      • 2011-07-18
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多