2011-11-26 26 views
1

我有一段代碼,我想將三十或四十個不斷變化的鍵/值對轉換爲一個類下的變量。例如:從字典鍵/值對動態設置self.x

for i in dict: 
    self.i = dict[i] 

但是,當然這隻會重置self.i每次。我試過eval,但是你不能用它設置變量,因爲它報告'x = 1'是無效的語法。我試過搜索,但我甚至不知道要搜索什麼...

謝謝!

回答

3

要更新一個類的實例,你可以只使用

vars(self).update(my_dict) 

我懷疑雖然這是你的問題的最佳解決方案。你能提供更多的細節,爲什麼你認爲你需要這個?

+0

相當,我在想什麼,但該礦表述:'自.__ dict__。更新(my_dict)' –

+0

另一個+1工作答案伴隨着建議尋找更好的解決方案的基本問題。 –

3

這是一種方法。 Sven Marnach是正確的 - 你應該多說一些你爲什麼要這樣做。

>>> class Foo(object): 
...  def __init__(self, d): 
...   for k in d: 
...    setattr(self, k, d[k]) 
... 
>>> f = Foo({'a':'b', 'c':'d'}) 
>>> f.a 
'b' 
>>> f.c 
'd' 
+0

+1對於工作答案伴隨着建議來思考真正的設計要求:-) –

1

Python類有一個名爲__dict__的內置屬性。

您可以使用它像這樣:

>>> class Blah(object): 
... pass 
>>> x = Blah() 
>>> x.__dict__['what'] = 40 
>>> x.what 

在你的情況,這樣的事情應該工作:

self.__dict__.update(dict) 
+0

我確實讀過某處(我認爲是昨晚),爲什麼'setattr'優於直接設置__dict__的值。當然,我現在不記得理由。 –

+0

同意,setattr可能更好,因爲\ _ \ _ dict__更多的是實現細節。 – jterrace