2011-06-01 49 views
4

考慮我有以下的解釋:通過字典循環插入值對象

dic={} 
dic["var1"]=val1 
dic["var2"]=val2 

現在我有一個包含兩個屬性的另一個對象:var1var2。 我想運行對象的方法內的循環,如(僞代碼):

for key, value in dic 
    self.key=value 

使self.var1=val2self.var2=val2

我怎樣才能實現它的蟒蛇?

梅厄

回答

3
>>> class Obj(object): 
...  pass 
... 
>>> obj = Obj() 
>>> for key, value in {'var1':5, 'var2':6}.iteritems(): 
...  setattr(obj, key, value) 
... 
>>> obj.var1 
5 
>>> obj.var2 
6 

在這裏,我有義務這樣說:「爲什麼不使用的字典?」

2

您可以使用 「SETATTR」:

class Test: 
    var1 = "Cheese" 
    var2 = "Toast" 


dic = {} 
dic["var1"] = "NewCheese" 
dic["var2"] = "NewToast" 

oTest = Test() 

for key in dic.keys(): 
    setattr(oTest, key, dic[key]) 

print "Var1 = ", oTest.var1 
print "Var2 = ", oTest.var2 

# 
# Result 
# 
# Var1 = NewCheese 
# Var2 = NewToast 
# 

http://docs.python.org/library/functions.html#setattr

2

您可以更新內部__dict__屬性,該屬性是一個包含對象所有成員的字典。

class MyObj: 
    def __init__(self, member_dict): 
     self.__dict__.update(member_dict) 

dic={} 
dic["var1"]=val1 
dic["var2"]=val2 

obj = MyObj(dic) 

print obj.var1 
>>> val1 
print obj.var2 
>>> val2