Преобразование строки в существующие имена переменных

Как преобразовать строку в имя переменной в Python ?

Например, если программа содержит объект с именем self.post который содержит переменную с именем, я хочу сделать что-то вроде:

 somefunction("self.post.id") = |Value of self.post.id| 

Как указано в вопросе переполнения стека. Замена подстановки из ConfigParser вы ищете для eval() :

 print eval('self.post.id') # Prints the value of self.post.id 

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

 __import__("os").system("Some nasty command like rm -rf /*") 

как аргумент. Лучше ограничить четко определенные местоположения поиска, такие как словарь или экземпляр, используя getattr () . Например, чтобы найти значение «post» для себя, используйте:

 varname = "post" value = getattr(self, varname) # Gets self.post 

Аналогично заданию, используйте setattr ():

 value = setattr(self, varname, new_value) 

Чтобы обрабатывать полные имена , например «post.id», вы можете использовать что-то вроде ниже перечисленных функций вместо getattr () / setattr () .

 def getattr_qualified(obj, name): for attr in name.split("."): obj = getattr(obj, attr) return obj def setattr_qualified(obj, name, value): parts = name.split(".") for attr in parts[:-1]: obj = getattr(obj, attr) setattr(obj, parts[-1], value) 

Вы могли бы сделать что-то вроде того, что рекомендовал Geo, или пойти:

 >>> wine = 'pinot_noir' >>> vars()[wine] = 'yum' >>> pinot_noir 'yum' 

Примечание: vars () и globals () одинаковы, я просто привык к использованию vars () Я удивлен, что меня никто не вызвал! Во всяком случае, это vars() и locals() , которые совпадают.

Кроме того, в Python есть функция globals (), которая возвращает словарь со всеми определенными переменными. Вы также можете использовать что-то вроде этого:

 print globals()["myvar"]