2012-08-15 26 views
-3

假設我們有兩個模塊A和B在Python中,我們如何使項目中的任何地方都可以訪問對象?

在模塊A,我們有

class Entity(object): 
    pass 

obj = Entity() 

現在我想導入的對象模塊B「OBJ」,也隨時隨地在我的項目

在模塊BI想要做這樣的事情

import obj 

我們該如何做到這一點?我們怎樣才能把對象放在我們的環境中?

+3

你嘗試過'從一個import obj'嗎? :-)非常基本的Python東西,真的。 – 2012-08-15 12:12:50

+2

我建議你先閱讀http://docs.python.org/tutorial/modules.html,在Stack Overflow的不太友好的一面開始給你提供反饋意見之前。 :-) – 2012-08-15 12:14:02

+0

@MartijnPieters - 我認爲這個評論應該是一個答案。 – mgilson 2012-08-15 12:15:35

回答

1

好吧,你可以做到這一點......但不要這樣做! 不要這樣做。

兩種方式,一種是清潔:

import sys 
sys.modules['obj'] = 'something here' 

import obj 
print obj 
print type(obj) 
assert obj == 'something here', 'It is not what you expect!' 

這種簡單的事情工作,但你可能有問題(和肯定會在某個時候)。例如reload(obj)將無法​​正常工作......

的另一種方式,更安全,更清潔,但仍,沒有合適的方式來使用你的代碼:

__builtins__['obj'] = "something else" 

# Used like this: 
print obj # no need to import anything 

這一個是更好的,因爲大家都希望(和應該期望)import導入模塊或包,而不是你的對象。最後一種方法並不依賴於這個假設,即使開發者不知道這個對象來自何處,並且obj可能會導致您的全局/本地命名空間發生衝突,這是由於未知(對開發人員)的原因。

你知道嗎,只需使用from B import obj。你不需要這個。

+0

不要這樣做。真。 – 2012-08-15 13:31:22

+0

@NedBatchelder我不確定在這一點上我是否足夠強調:D,但我認爲這會讓OP更好地理解幕後發生的事情。我總是發現這些東西很有趣,但你是100%正確的:不要做。 – jadkik94 2012-08-15 19:37:52

相關問題