2016-07-07 111 views
0

的Python 3.4.2的問題,我已經廣泛地尋找一個答案,找不到對象。Python的 - 實例化列表類型的字典,並用繩子

我想創建Python對象(或任何你會打電話名單,類型的字典,並CLASSE /對象實例化)通過的定義指定的字符串。換句話說,我想在分配方程的左邊使用字符串。

舉例來說,如果我們有一個類和分配/實例:

class char_info: 
    def __init__(self): 
     self.name   = 'Joe' 
     self.mesh   = 'Suzanne' 
newchar = char_info() 
print (newchar.name) 

Joe

我想用一個字符串從另一個源(比如列表)的實例名稱使用,而不是「newchar」。但是,我不確定語法。我需要在等式的左邊引用這個字符串。此外,我如何在後面的代碼中引用它,因爲我只是在運行時不知道名稱?

顯然,這並不工作:

list = ['Bob', 'Carol', 'Sam'] 
# list[0] = char_info() #this doesn't work, it would 
# try assigning the value of char_info() to the item in [0] 
str(list[0]) = char_info() #also doesn't work, obviously 
print (str(list[0]) #obviously this is wrong, but how do you reference? 

location: :-1

Error: File "\Text", line 2

SyntaxError: can't assign to function call

我想是有發言權,一個循環,在列表/字典迭代,並使用這些字符串來實例化類。有沒有辦法做到這一點?我不知道的特殊語法?

順便說一句,這同樣的事情應該是創建列表名稱,字典名稱等同樣的事情的解決方案。甚至像枚舉變量名稱或從列表中分配變量一樣簡單。你如何動態定義分配名稱?

+0

使用字典的列表,如果你要訪問的變量作爲字符串 –

+3

HTTP ://stackoverflow.com/questions/11553721/using-a-string-variable-as-a-variable-name – miyamoto

回答

-1

您可以使用execexec(list[0] + "=char_info()")但是這是一個壞主意。使用字典比較好:

chars = {} 
chars[list[0]] = char_info() 
+0

'exec'是一樣'eval'壞和這裏沒有必要。 – TigerhawkT3

-1

What I want is to have say, a loop that iterates over a list/dict and uses those strings to instantiate the class. Is there any way to do this?

class char_info: 
    def __init__(self, name): 
     self.name   = name 

list_names = ['Bob', 'Carol', 'Sam'] 
list_char_info = [char_info(name) for name in list_names] 

上面的代碼將實例化一個類每名名

+0

我同意其他人的意見,字典是最好的 – Alter

+0

'exec'和eval'一樣糟糕,在這裏沒有必要。 – TigerhawkT3

+0

夠正確。我改變了我的答案只回答了主要問題。 exec()從來不是一個好的解決方案,但它確實解決了'我想在分配方程的左邊使用字符串'和'我需要在方程的左邊引用這個字符串。 – Alter