Is there any way to get the name of an object in Python? For instance:
my_list = [x, y, z] # x, y, z have been previously defined
for bla in my_list:
print "handling object ", name(bla) # <--- what would go instead of `name`?
# do something to bla
Edit: Some context:
What I'm actually doing is creating a list of functions that I can specify by the command line.
I have:
def fun1:
pass
def fun2
pass
def fun3:
pass
fun_dict = {'fun1': fun1,
'fun2': fun2,
'fun3': fun3}
I get the name of the function from the commandline and I want to call the relevant function:
func_name = parse_commandline()
fun_dict[func_name]()
And the reason I want to have the name of the function is because I want to create fun_dict
without writing the names of the functions twice, since that seems like a good way to create bugs. What I want to do is:
fun_list = [fun1, fun2, fun3] # and I'll add more as the need arises
fun_dict = {}
[fun_dict[name(t) = t for t in fun_list] # <-- this is where I need the name function
This way I only need to write the function names once.
Objects do not necessarily have names in Python, so you can't get the name.
It's not unusual for objects to have a __name__
attribute in those cases that they do have a name, but this is not a part of standard Python, and most built in types do not have one.
When you create a variable, like the x, y, z
above then those names just act as "pointers" or "references" to the objects. The object itself does not know what name you are using for it, and you can not easily (if at all) get the names of all references to that object.
Update: However, functions do have a __name__
(unless they are lambdas) so, in that case you can do:
dict([(t.__name__, t) for t in fun_list])