在Python中,我如何从一个导入的模块访问主模块的命名空间?

22

具体而言,我需要从已导入的模块中访问一些来自主模块的对象和全局变量。我知道当父模块需要从子模块获取某个特定的东西时如何找到这些内容,但我无法弄清如何朝另一个方向进行。


好的,我觉得这一定是真的,因为我在任何地方都找不到这方面的答案。关键是我不关心是否重用这些代码,我只是想将这个项目拆分成多个文件,以便更容易找到我要寻找的内容。老实说,我真的不知道自己在做什么,所以这是一个学习的过程,但实际上我只是想在需要编辑代码时更容易找到需要编辑的代码。 - Damon
我认为应该有一种方式在导入模块时传递参数,就像在传递参数给对象构造器时那样。但是我从来没有找到一种干净的方法来实现这一点。 - martineau
3
我也是出于完全相同的原因在寻找完全相同的东西,所以这似乎是一个典型的新手问题。 - sfranky
类似:在CR SE上的从类中访问argparse参数 - kenorb
4个回答

15
import __main__

但是不要这样做。


7
@Alcott:因为它很容易把你的程序弄成椒盐脆饼。 - Ignacio Vazquez-Abrams
2
@IgnacioVazquez-Abrams,您能详细说明一下吗? - Charlie Parker

11

你需要的答案是:

import __main__

main_global1= __main__.global1

然而,每当一个模块module1需要来自__main__模块的东西时,那么:

  • 要么__main__模块应将所有必要的数据作为参数提供给module1函数/类,
  • 要么您应该将需要共享的所有内容放在另一个模块中,并在__main__module1中导入它,如import module2

2
我认为这会起作用:
import sys    
main_mod = sys.modules['__main__']

4
这相当于将 import __main__ as main_mod - Ignacio Vazquez-Abrams

1

不确定这是否是一个好的实践,但也许你可以将你需要的对象和变量作为参数传递给导入模块中调用的方法或类。


1
这实际上是建议的方法,尽管原帖似乎在寻找__main__ - Zae Zoxol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接