当前位置: 首页 > 面试题库 >

Python:如何两次加载一个模块?

巫马昆杰
2023-03-14
问题内容

有没有办法在同一个python会话中两次加载一个模块?
用一个例子填补这个问题:这是一个模块:

模版

x = 0

现在,我想两次导入该模块,例如创建一个类的两个实例以实际具有的两个副本x

要已经回答评论中的问题,“如果有人只要创建一个带有x变量的类,为什么有人会想这样做”:
您是正确的,但是存在大量的源,必须重写,并且两次加载一个模块将是一个快速修复^^。


问题答案:

是的,您可以两次加载一个模块:

import mod
import sys
del sys.modules["mod"]
import mod as mod2

现在,modmod2是同一模块的两个实例。

也就是说,我怀疑这是否有用。改用类-最终将减少工作量。

编辑 :在Python 2.x中,您还可以使用以下代码“手动”导入模块:

import imp

def my_import(name):
    file, pathname, description = imp.find_module(name)
    code = compile(file.read(), pathname, "exec", dont_inherit=True)
    file.close()
    module = imp.new_module(name)
    exec code in module.__dict__
    return module

此解决方案可能比第一个更灵活。由于(部分地)滚动了自己的导入机制,因此您不再需要“与之抗衡”。(注意,此实现不设置__file____path____package__模块的属性-
如果这些都需要,只是添加代码来设置它们)



 类似资料:
  • 问题内容: 我有一台运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 你可以使用reload内置函数重新加载已导入的模块: 在Python 3中,已移至imp模块。在3.4中,不推荐使用importlib,而在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是你想要的。诸如Django开发服务器

  • 问题内容: 我有一个运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么? 问题答案: 您可以使用reload内置函数(仅适用于Python 3.4+)重新导入已导入的模块: 在Python 3中,已移至模块。在3.4中,imp不推荐使用,而reload在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。 我认为这就是您想要的

  • 我的spring ApplicationContext文件正在加载两次。这是使用标准的maven webapp结构,只有一个web.xml。只有一个上下文文件,并且只定义了一个servlet。没有Context-Loader-Listener。 我尝试了以下方法来解决此问题 标准命名约定('test-servlet.xml') 使用不同的上下文文件定义ContextLoaderListener-不

  • 问题内容: 当我尝试在小程序中同时播放两个声音时,它将不起作用。我正在使用s。甚至可以在小程序中同时播放两个声音吗? 问题答案: 从Java 1.3+开始,请使用Java Sound API 的类。它类似于基于applet的类,但更好。 EG改编自Java声音信息上显示的EG。

  • 问题内容: 我试图将两个数组排列在一起,结果总是不正确。我将向您展示我的代码,获得的结果以及正在寻找的结果。 我想我只是做错了,但不确定其他方法。 我的代码: 结果:(缩短以节省空间) 我正在寻找的结果如下: 问题答案: 问题 嗯,问题当然出在您嵌套的foreach循环上。因为对于数组的每个元素,您都循环遍历整个数组(所以总共有* 次迭代)。 解决方案 为了解决这个问题,您必须一次遍历两个数组。

  • 问题内容: 给定以下目录结构: 您可以看到 my-project 和 module-x 都需要React。我对这个问题有同样的问题,但建议是从package.json依赖项中删除反应。我这样做了,只要在 module-x中 没有安装node_modules,它就可以正常工作,因为Webpack将使用 my-project中的 React 。但是,如果我正在开发 module-x 并已安装node_