我有以下code
:
tmpVariable = completeVariableName[filedsValueCounter];
tmpValue = fieldsValue[fieldsName[fieldsNameCounter]];
print eval ("'%s = \"%s\";' % (tmpVariable, tmpValue)");
上述代码的输出是:
self.name = "Peter"
下一行评估函数是:
print self.name
但它的输出是:
None
问题:我的问题在哪里?
答案 0 :(得分:2)
为了在Python中执行语句(例如问题中的赋值),您必须使用exec()
,因为eval()
仅适用于表达式 (评估价值的东西)。无论如何,在这种情况下你不需要评估字符串,setattr
是要走的路:
setattr(self, 'name', 'Peter')
上面的代码与此代码具有相同的效果:
self.name = 'Peter'
答案 1 :(得分:1)
eval
用于表达式,但赋值是一个声明。
但是这里没有必要使用它。您应该使用setattr
。
答案 2 :(得分:1)
如果您想使用替换创建类的实例,那该怎么办。
类似的东西:
class Class1:
pass
class Class2:
def generateParameters(self):
self.parameters = ['a', 'b', 'c']
for i in parameters:
"self.{0} = class2()".format(i)
这个想法是用特定的变量生成一些实例