2012-01-30 87 views
0

所以我有以下情况。我有一个配置类config.py持有像一些系统设置变量:'重新加载'python中的变量

class TVBSettings(): 

    TVB_CONFIG_FILE = os.path.expanduser(os.path.join("~", 'tvb.configuration')) 
    TVB_STORAGE = os.path.expanduser(os.path.join("~", "TVB" + os.sep)) 

    .... etc ... 

现在除了这个,我有一个配置文件,当它的存在将覆盖一对夫妇这些变量。为了在UI中显示这些“改写的”配置变量我使用元史/ CherryPy的,我有一个SettingsService基地字典,speficifies像一些信息(在setttingsservice.py):

from tvb.config import TVBSettings as cfg 

CONFIGURABLE_KEYS = {'TVB_STORAGE':{'label':'Root used for all you projects:', 
            'value':cfg.TVB_STORAGE, 
            'type':'text'}, 
        'SERVER_IP':{'label':'Server name:', 
           'value':cfg.SERVER_IP, 
           'type':'text'}, 
        'WEB_SERVER_PORT':{'label':'The port used by cherrypy:', 
             'value':cfg.WEB_SERVER_PORT, 
             'dtype':'primitive', 
             'type':'text'}, 
        ... other entries ... } 

现在这settingsservice.py也有一个方法update_configuration(),它从配置文件中读取并修改frim cfg的默认参数。这可以正常工作,并且可以在整个系统的其余部分看到更改,但CONFIGURABLE_KEYS字典仍然保留旧值(即,即使cfg.TVB_STORAGE已从配置文件修改,在上例中也是如此,在旧字典中旧值仍然存在保持)。现在,我猜这是出于同样的原因,这些变化都没有做,如果我做的:

>>> class A: 
... x = 1 
>>> a = {1: A.x} 
>>> A.x = 2 
>>> a 
{1: 1} 

所以我的问题是,有没有办法迫使蟒蛇“刷新”该变量考虑新的变化。

EDIT(sblom响应后):

这是不是真的在我的情况选择,cfg将来自例如ACONFIGURABLE_KEYS需要从cfg许多不同variabled的不同条目。

问候, 波格丹

+1

[此问题](http://stackoverflow.com/questions/986006/)深入讨论了Python中通过引用传递变量。 – 2012-01-30 07:58:42

回答

1

如果说a = {1: A},然后A.x = 2a[1].x的新值是2

它不工作的书面是斧是一个普通的旧数据类型的原因,不是对象引用。如果您使用类似A的东西,而其中的的对象引用,则对其的更改将在稍后出现。