2016-07-07 114 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