2012-01-25 343 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字典中。 :) –