tags:

views:

1032

answers:

4

How do i convert a string to the variable name in python?

e.g.

if the program contains a object named, self.post,that contains a variable named, i want to do something like,

somefunction("self.post.id") = |Value of self.post.id|
+2  A: 

as referenced here you're looking for eval()

print eval('self.post.id') # prints value of self.post.id
Owen
yeah.. thanks a lot.
Mohit Ranka
+3  A: 

Also , there is the globals function in python which returns a dictionary with all the defined variables . You could also use something like this :

print globals()["myvar"]
Geo
+5  A: 

Note: do not use eval in any case where you are getting the name to look up from user entered input. Eg. if this comes from a web page, there is nothing preventing anyone from entering:

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

as the argument. Better is to limit to well defined lookup locations such as a dictionary or instance using getattr(). For example, to find the "post" value on self, use:

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

Similarly to set it, use setattr():

value = setattr(self, varname, new_value)

To handle fully qualified names, like "post.id", you could use something like the below functions in place of 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)
Brian
+1. I definitely recommend using getattr() and setattr()
ayaz
+2  A: 

You could do something like what Geo recommended, or go with:

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

Note: vars() and globals() are the same, I'm just used to using vars() I'm surprised nobody called me out on this! Anyway, it's vars() and locals() that are the same.

gibson