2012-01-25 564 views
3

這是Python中的全局變量聲明的良好實踐形式嗎?在某些情況下,我的字典在B.py中沒有數據。看起來不一致。Python全局變量通過導入?

classes.py

class Aclass: 
    dict = {} 

myClass = Aclass() 

A.py:

from classes import myClass 

myClass.dict["variable"] 

B.py:

from classes import myClass 

print str(myClass.dict) 

A.py被B.py.之前處理這爲我打印了一個空字典{}

這是上一篇文章的簡化問題:Shared/Global Dictionary in Django Between URLs and Context Processor。感謝您的見解。

+2

A.py不會對變量做任何事情。它僅嘗試訪問字典中的條目。你的意思是說'myClass.dict [「variable」] =「value」'(或者這個效果)? – HardlyKnowEm

+0

希望大家知道這個問題稍微有點陰險,並感謝您的幫助。它通過兩條路徑導入相同的文件:一個導入了project.classes.myClass,另一個導入了classes.myClass,創建了兩個單獨的實例。這是減少的帖子是這一個:[URL /上下文處理器之間的Django共享/全球詞典](http://stackoverflow.com/questions/9010797/shared-global-dictionary-in-django-between-urls -and-context-processor) – garromark

回答

2

如果A.py將其更改爲

myClass.dict["variable"]="hello" 

(在評論中指出)

接下來的問題是有趣的。

沒關係,但最好有另一個接口(函數,方法)到那個數據。這是存儲模塊狀態的一種方式。您稱爲myClass(!)的對象與a和b相同。

多個導入是安全的,除了返回相同的加載模塊外什麼也不做。

+0

...因爲在*(在同一進程中,oc)*之前導入的模塊保存在sys.modules字典中。 :) –