2015-10-09 77 views
0

我正在處理需要處理一組相關變量的程序。我想他們都捆綁成一個類,所以我可以直觀地訪問它們...在for循環中創建實例變量

class transition(): 
... 

t1 = transition(stuff_to_initialize) 
retrieve_that_variable = t1.that_variable_in_initialized_stuff 

,但我希望能夠從我的聲明實例變量的for循環:

class transition(object): 
    ''' instance of a transition includes... 
    ''' 
    # order convention for uncertainty terms Cij 
    __order = {'c11': 1, 'c22': 2, 'c33': 3, 'c12': 4, 'c13': 5, 'c23': 6} 
    __vector = {'Rx': 0.0, 'Ry': 0.0, 'Rz': 0.0} 


    def __init__(self, cij=__order, vector=__vector): 
     # Things that a transition instance must specify 
     self.layer_type = 0 

     for item in cij.keys(): 
      self.item = 0   
     for item in vector.keys(): 
      self.item = 0 

但在本例中,初始化transition實例後,我只有一個實例變量transition.item

我可以從變量名稱列表初始化實例變量嗎?

+1

如果我理解你,你想動態地命名這些東西?爲什麼不只是創建一個變量來保存您用作參考的字典副本? – BlivetWidget

+0

如果我正確地理解了你,這是一個[壞主意](http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)。 – That1Guy

回答

0

這是一個不好的方法去做,但你想要的功能是setattr。 你可以做

for item in cij.keys(): 
    setattr(self, item, 0) 

所以,是的,你可以從名稱列表初始化實例變量。 很難理解爲什麼你不會在這種情況下使用字典。

+0

在我的情況下,我基本上用一個代碼處理另一個簡單程序的I/O。在稍後的時間點,我需要爲特定格式的子進程生成輸入文件,並且我認爲能夠從't1 = transition()'獲取相關信息... ...''t1.value_I_need'使程序更少依賴在語法上...用戶輸入不需要特定的關鍵字來解析輸入,只需要對類進行正確初始化。 另一方面,我是自學成才,所以我可以以愚蠢的方式做事情。 感謝您的迴應! – PetMetz

+0

與t1 = {} ... t1 ['value_I_need']'有什麼不同?在程序中的某個時刻,屬性的名稱將不得不被輸入,並且很難明白爲什麼你不會將它們作爲鍵存儲到將它們映射到相應值的字典中。 – JoeCondron