





Как указано в вопросе Stack Overflow Замена на место из ConfigParser, вы ищете eval():
print eval('self.post.id') # Prints the value of self.post.id
Кроме того, в Python есть функция глобалы (), которая возвращает словарь со всеми определенными переменными. Вы также можете использовать что-то вроде этого:
print globals()["myvar"]
Примечание: используйте ли нет 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)
Что, если нет «я»? Т.е. вы находитесь в глобальном масштабе. Тогда я думаю, что нужно использовать vars () ['name'], или есть какой-то запасной вариант getattr?
Вы можете сделать что-то вроде того, что рекомендует Geo, или пойти с:
>>> wine = 'pinot_noir'
>>> vars()[wine] = 'yum'
>>> pinot_noir
'yum'
Примечание: vars () и globals () одинаковы, я просто использовал vars ()
Я удивлен, что никто меня об этом не вызвал! Так или иначе, это vars() и locals() это одно и то же.
Почему бы не использовать setattr ()?