2013-06-25 68 views
0

尋找一個更優雅(因此)更健壯的方式來做到這一點。目前我有一個在創建時定義了一些默認實例變量的類。然後我讀入一個JSON文件,允許用戶覆蓋其中的一些默認值。 所有這些代碼都在init類的方法中。從JSON文件設置python類實例默認變量

# Instance variables defaults 
self._a = 'A - original' 
self._b = 'B - original' 
self._c = 'C - original' 

# line below gives example of dict that gets returned from the JSON read 
JSON_dict = {'a': "A-overide", 'c': "C-overide"} 

# Inelegent code: 
if "a" in JSON_dict: 
    self._a = JSON_dict['a'] 
if "b" in JSON_dict: 
    self._b = JSON_dict['b'] 
if "c" in JSON_dict: 
    self._c = JSON_dict['c'] 

該結構不能很好地擴展。關於如何以更加Python的方式獲得理想結果的任何建議?

並非所有的變量都需要出現在JSON字典中,但是如果它們是它們,它們應該覆蓋卡編碼的字典。

回答

1
def __init__(self, ...): 
    for key, val in JSON_dict.iteritems(): 
    setattr(self, '_%s' % (key,), val) 
+0

答案有效......澄清一下:爲什麼使用(key,)。知道它評估爲元組,但作爲我可以看到它仍然有效,如果只做:setattr(self,'_%s'%key,val)我錯過了什麼嗎? – Joop

+0

習慣的力量。既然你確定'key'永遠不可能是一個元組,所以單獨使用'key'是安全的。 –