用python重新加载模块

用python重新加载模块,python,module,reload,Python,Module,Reload,当我使用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 re

当我使用
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

您必须有一个要重新加载的模块。当您使用来自foo的
导入条
时,除非
是一个模块(在您的情况下,它看起来不是),否则您必须使用另一个导入语句

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()
交互,那么您可能做了一些错误的事情,以交互方式编程时,重新加载已更改的模块内容才有合理的用处。可能的重复是@TokenMacGuy的答案遗漏了什么吗?如果没有,你应该接受它。