2011-07-21 48 views
0

我想創建從列表值或字典鍵或值獲取他們的名字的類的實例。基本上我想要做的是:如何在可迭代鍵後命名類實例?

iter = ['foo', 'bar'] 
for a in iter: 
    a = Cls() 

,並得到CLS()類,而不必例如通過在每個循環更新引用的foo和酒吧的實例。

在此先感謝。

+0

所以你想'foo'和'bar'爲局部變量?或者Cédric的回答好嗎? –

+1

如果Ray寫的是,你在找什麼,那麼答案是:你最好不要! – phant0m

回答

7

也許有dictionnary:

iter = ['foo', 'bar'] 
result = {} 
for a in iter: 
    result[a] = Cls() 

而且在結果你就會有{ 'foo' : instance_of_Cls, 'bar' : instance_of_Cls}

+3

較短:'result = dict((name,Cls())爲iter中的名字)'。 +1。 –

+0

@cedric這是我正在使用的,但我想有foo.attr和foo.meth而不是結果['foo']。attr等。這是非常可讀的,並避免與包裝容器搞亂。不管怎樣,謝謝你。 – Silopolis

+0

@Silopolis:做你想做的事情,你必須修改你的locals()字典,這不是一個好的解決方案......爲什麼你的變量必須由字符串定義? –

-1

你可以使用動態代碼評估。

inst1 = eval("foo()") 
inst2 = eval(a + "()") 
inst3 = eval(a)() 
+0

也許我誤解了這個問題。 – ron

+0

我的問題是從列表或字典中獲取inst1/2/3。如果您想要創建一系列字符串或列表或其他,從另一個容器中獲取其名稱,我的問題也適用。 – Silopolis