On Nov 10, 2:59 pm, NickC <reply...@works.fine.invalid> wrote: > 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: > $ ./ephemeris.py Moon > > code: > 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, > > -- > NickC
A direct way is to use: moon1 = getattr(ephem, 'Moon')() hth Jon. -- http://mail.python.org/mailman/listinfo/python-list