【问题标题】:Reload module in python在python中重新加载模块
【发布时间】:2012-10-19 19:07:24
【问题描述】:

当我使用 myModules 字典从文件 myModule.py 导入类 MyClass 时,我会这样做

from myModules.myModule import MyClass

我对文件myModue.py 进行更改后如何重新加载此模块?以下是一些误判:

reload(MyClass) # TypeError: reload() argument must be module
reload(myModule) # NameError: name 'myModule' is not defined
reload(myModules.myModule)  # NameError: name 'myModules' is not defined

【问题讨论】:

标签: python module reload


【解决方案1】:

您必须有一个模块才能重新加载。当您使用from foo import bar 时,除非bar 是一个模块(在您的情况下看起来不是),否则您将不得不使用另一个导入语句。

from myModules.myModule import myClass
# this will cause myModule.py to be evaluated.  only myClass is in scope

from myModules import myModule
# since myModule has already been imported, myModule.py is not evaluated again. 
# but now myModule is in scope.

reload(myModule)
# this will cause myModule.py to be evaluated again.

如果由于某种原因您不想要两个导入,也可以在 sys.modules 中找到已导入的模块

【讨论】:

  • 像我一样导入类时是否认为风格不好?还是没关系?
  • 风格不错。这取决于您需要从导入中获得什么。如果只需要 MyClass,则只导入 MyClass。如果您需要 MyModule 中的所有内容,请导入 MyModule(并使用 MyModule.MyClass 访问 MyClass)
  • 我个人更喜欢总是导入模块,但这不是原因。使用模块可以让你避免循环导入的麻烦,也可以减少读者跟踪的全局名称的总数。如果您担心您的导入如何与reload() 交互,那么您可能正在做错了什么,只有在交互式编程时才合理有用,以重新加载您已更改的模块内容。跨度>
猜你喜欢
  • 1970-01-01
  • 2015-02-07
  • 2013-05-16
  • 2011-09-08
  • 1970-01-01
  • 2018-10-10
  • 2010-10-01
相关资源
最近更新 更多