2013-10-14 59 views
0

我正在尋找一個代碼,通過它我可以使對象成爲全局對象。 我所尋找的 - 假設有具有代碼如何使對象或實例成爲全局的

import some_module 

class classname: 
    def __init__(): 
     pass 

    def createobj(): 
     some_module_obj = some_module() 

還有其他兩個文件1.py和2.py一個文件xyz.py具有代碼 1.py

import xyz 

obj = classname() 
obj.sayhi() 

2.py

import xyz 

obj.sayhi() 

我想用同樣的objec t在2.py中創建一次1.py

任何人都可以幫助我知道如何實現這一點。

感謝, VIPUL

回答

0

不能創建一個這是已知的,指的是在所有模塊相同的對象。每個模塊都有其自己的global名稱空間。

但是,您當然可以通過使用限定名稱來訪問其他模塊的名稱空間。

編輯:(。即在文件稱爲1.py

使用模塊的名字,如1或類似沒有好辦法,因爲許多不能被用作標識符。合格的名稱,如1.obj是語法錯誤。所以我會使用文件one.pytwo.py,然後我可以訪問one.obj沒有這個麻煩。

import one 
print one.obj # or use it any way you like 

如果導入像這樣:

如果文件one.py你有某事像

obj = "foo" 

那麼您可以在文件two.py導入此

from one import obj 

然後你仍然會有相同的對象:

print obj == one.obj # will print True (they are equal) 
print obj is one.obj # will print True (they are the same) 

但在不同的命名OBJ變量:

obj = "bar" 
print obj, one.obj # will print "bar foo" 

兩個變量都沒有的情況下,分配某物他們同樣只有事宜。

所以,如果你想成爲能夠改變值(和有變化在所有使用模塊的影響),您可以使用合格的域名(one.obj)無處不在:

import one 
one.obj = "bar" 

,或者而不是分配一個新的值給變量,你可以改變的現有值。這也將在所有使用模塊的效果:

one.py

obj = [ "foo" ] 

two.py

from one import obj 
obj[0] = "bar" 

這也將有效果one.py即使我們obj是不同的變量比one.obj因爲這兩個變量引用相同的列表。

如果可能的話,我會建議使用合格名稱的版本當然是因爲引用的東西隱藏了機制,並可能會讓下一個開發者感到驚訝。

+0

感謝您的信息。你可以請分享一些示例代碼如何實現這個 – vgupta

+0

我擴展了我的答案。 – Alfe

1

2.py

import xyz 
print xyz.obj 

from xyz import obj 
print obj 
相關問題