2010-09-06 43 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
相關問題