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|
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|
as referenced here you're looking for eval()
print eval('self.post.id') # prints value of self.post.id
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"]
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)
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.