2010-09-06 44 views
16

具体来说,我需要从导入模块中的主模块获取一些对象和全局变量。我知道如何在父模块需要某个子模块的特定事物时找到这些东西,但我无法弄清楚如何去往另一个方向。在Python中,如何从导入的模块访问主模块的名称空间?

+0

嗯,好吧,我认为一定是这种情况,因为我无法在任何地方找到任何答案。底线是我不关心重复使用这些代码,我只是试图将这个项目拆分成多个文件,因此更容易找到我正在寻找的东西。说实话,我并不真正知道自己在做什么,所以这是一种学习体验,但实际上我只是希望在编辑时能够更容易地找到要编辑的代码。 – Damon 2010-09-06 02:15:05

+0

我同意应该有一种方法来将参数传递给模块,当它被导入 - 有点像当你将它们传递给对象构造函数时。然而,我从来没有找到一个干净的方式来做到这一点。 – martineau 2010-09-06 10:14:28

+2

我一直在寻找完全相同的原因,所以它似乎是一个典型的新手东西.. – sfranky 2012-12-15 20:33:03

回答

12
import __main__ 

但是不要这样做。

+3

为什么不这样做? – Alcott 2014-07-04 05:00:18

+5

@Alcott:因为它可以很容易地把你的程序变成椒盐卷饼。 – 2014-07-04 05:06:47

+1

@ IgnacioVazquez-Abrams你可以扩展吗? – 2017-06-22 21:52:11

1

不知道这是否是一种好的做法,但可以将需要的对象和变量作为参数传递给您在导入模块中调用的方法或类。

3

,我认为这会工作:

import sys  
main_mod = sys.modules['__main__'] 
+0

这相当于'import __main__ as main_mod'。 – 2010-09-06 08:51:31

9

你要找的答案是:

import __main__ 

main_global1= __main__.global1 

但是,每当一个模块module1__main__模块需要的东西,然后:

  • 要么__main__模块应提供所有必要的数据为参数设置为module1函数/类,
  • 或者您应该将需要在另一个模块中共享的所有内容导入到__main__module1中,并将其导入为import module2
相关问题