Подтвердить что ты не робот

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

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

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

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

Ответ 2

Примечание: используйте не использование 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)

Ответ 3

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

print globals()["myvar"]

Ответ 4

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

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

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