2012-01-30 74 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的東西,而其中的的對象引用,則對其的更改將在稍後出現。