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

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

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

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

4 Solutions collect form web for “Преобразование строки в существующие имена переменных”

Как указано в вопросе переполнения стека. Замена подстановки из 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"] 
  • не может импортировать имя GoogleMaps
  • Классы нового стиля Python и функция __subclasses__
  • Какое разрешение (я) мне нужно, чтобы прочитать имена пользователей, которые отправили на страницу Facebook?
  • Импортировать файл Python из исполняемого скрипта
  • Как открыть и обработать файл CSV, хранящийся в Google Cloud Storage, используя Python
  • Написание простейшего "Rock Paper Scissors" игрового бота
  • PyCrypto установить, скопировав папку «lib» на Windows7 64bit
  • Как найти количество перекрывающихся последовательностей в String с Python?
  • Python - лучший язык программирования в мире.