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