Create object from variable indirect reference?

NickC reply-to at works.fine.invalid
Tue Nov 10 15:59:25 CET 2009

I can't seem to find a way to do something that seems straighforward, so I 
must have a mental block.  I want to reference an object indirectly 
through a variable's value.

Using a library that returns all sorts of information about "something", I 
want to provide the name of the "something" via a variable (command line 
argument).  The something is a class in the library and I want to 
instantiate an object of the class so I can start querying it.  I can't 
figure out how to pass the name of the class to the library.

Or, put another way, I can't figure out how to indirectly reference the 
value of the command line argument to create the object.

To make it clearer, it's roughly equivalent to this in bash:
 Sun="1AU" ; body=Sun; echo ${!body} --> outputs "1AU". 

command line:
$ ./ Moon

import ephem
import optparse

# various option parsing (left out for brevity), 
# so variable options.body contains string "Moon",
# or even "Moon()" if that would make it easier.

# Want to instantiate an object of class Moon.
# Direct way:
moon1 = ephem.Moon()
# Indirect way from command line with a quasi bashism that obviously fails:
moon2 = ephem.${!options.body}()

Can someone point me in the right direction here?

(The library is PyEphem, an extraordinarily useful library for anyone 
interested in astronomy.)

Many thanks,


More information about the Python-list mailing list