Create object from variable indirect reference?

Jon Clements joncle at googlemail.com
Tue Nov 10 10:08:47 EST 2009


On Nov 10, 2:59 pm, NickC <reply... at 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.



More information about the Python-list mailing list