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

在Python中覆盖名称空间

严亮
2023-03-14
问题内容

假设有一个文件夹“ / home / user / temp/a40bd22344”。名称是完全随机的,并且在每次迭代中都会更改。我需要能够使用固定名称(例如“
project”)在Python中导入此文件夹。我知道我可以将此文件夹添加到sys.path中以启用导入查找,但是有没有一种方法可以将“a40bd22344”替换为“项目”?

也许 init .py有一些聪明的技巧?

添加:

它必须是全局的-也就是说,其他脚本通过该标准加载“项目”:

import project

必须正常工作,而是加载a40bd22344。


问题答案:

你先用导入 进口

>>> __import__('temp/a40bd22344')
<module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>

然后,确保该模块被Python识别为project

>>> import sys
>>> sys.modules['project'] = sys.modules.pop('temp/a40bd22344')

之后,当前Python会话中的任何导入项目都将获得原始模块

>>> import project
>>> project
<module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>

这也适用于子模块:如果在同一位置有foobar.py,则将获得

>>> import project.foobar
>>> project.foobar
<module 'project.foobar' from 'temp/a40bd22344/foobar.py'>

附录。 这是我正在运行的:

>>> print sys.version
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]


 类似资料:
  • 问题内容: 我有一堂课,有以下领域。这些属性用于在需要调用外部rest API方法时序列化为json对象。 在属性名称中,外部API服务调用需要一些类似json归档名称格式的内容。 就我而言,这可以根据诸如test,dev和prod之类的环境进行更改。因此,我正在寻找一种将listId值移动到app.config中的方法。 我尝试按照以下方式进行操作,但不允许这样做。如果分配常数值,它将起作用。

  • 假设我有一个这样的类: 假设我稍后创建了一个Foo对象,并选择覆盖f1的方法定义,如下所示: 如果我尝试: 我得到: 当然,我正努力让“我的f1”出版。我也希望f1是可选的。这是怎么回事?有没有可能在namedtuple中定义一个方法的默认实现,然后在new中重写它?

  • 在这个特定的示例中,我扩展了

  • 我只是用MVVM轻型工具包编写一些培训窗口项目。当MVVM Light引用添加到项目中时,下面的资源被自动添加到app.xml中 不幸的是,它不起作用,即由于以下错误,无法构建/编译项目: 我找到了几种针对此问题的常见解决方案(例如:更改解决方案平台、清理、重建、重新启动Visual Studio等),但它们并没有改变什么。创建一个新项目也没有帮助。 有没有其他办法让它起作用?我使用Visual

  • 问题内容: 是否可以在Python中覆盖+ =? 问题答案: 是的,重写该方法。例:

  • 我希望它改用id: 我正在对ObjectMapper进行子类化,所以也许有一些方法可以挂钩