2011-01-20 3 views
2

Привет всем, у меня есть лучший способ динамического создания/вызова переменных, я пытаюсь создать структурный синтаксический анализатор, который будет считывать данные объекта в блоке и динамически создавать эти объекты в виде переменных они обнаружены.динамически создавать/вызывать переменные в python3

Это и пример моего текущего метода, но похоже, что я собираюсь сделать это неправильно.

>>> VAR="VAR2" 
>>> class item(): 
...  pass 
... 
>>> newitem=item() 
>>> exec('newitem.'+VAR+'=\''+'hello'+'\'') 
>>> newitem.VAR2 
'hello' 
>>> 

ответ

3

setattr.

setattr(object, attribute_name, value) 

Так, например, setattr(a, "pancakes", "syrup") (более или менее) такой же, как a.pancakes = "syrup"

Таким образом, вы можете использовать setattr(newitem, VAR, "hello") сделать newitem.VAR2 стать "привет".

+0

именно то, что я искал приветствия. –

4

Я думаю, что вы на правильном пути для динамического создания переменных, хотя я бы поставил под вопрос, почему вы не используете хэш-карту. Почему бы не сделать

newitem = {} 
newitem[VAR] = 'hello' 

Пытаться держаться подальше от Eval заявления как можно больше, потому что вы должны настроить для «питона инъекции». то есть VAR может включать «», что может привести к недействительному коду. Гораздо проще использовать обычные конструкции Python, когда это возможно

+0

да, это, наверное, более здравый способ делать что-то, спасибо. –

Смежные вопросы