Calling a method with a variable name

Diez B. Roggisch deets at nospam.web.de
Wed Nov 4 09:57:24 EST 2009


Simon Mullis wrote:

> Hi All,
> 
> I'm collating a bunch of my utility scripts into one, creating a
> single script to which I will symbolic link multiple times.  This way
> I only have to write code for error checking, output-formatting etc a
> single time.
> 
> So, I have
> 
>  ~/bin/foo  -> ~/Code/python/mother_of_all_utility_scripts.py
>  ~/bin/bar  -> ~/Code/python/mother_of_all_utility_scripts.py
>  ~/bin/baz  -> ~/Code/python/mother_of_all_utility_scripts.py
> 
> I would like "bar" to run the bar method (and so on).
> 
> -------------
> class Statistic()
>     def __init__(self):
>          pass
> 
>     def foo(self):
>          return "foo!"
> 
>     def bar(self):
>          return "bar!"
> 
> #    ... and so on...
> 
> def main():
>     stats_obj = Statistic()
>     name = re.sub("[^A-Za-z]", "", sys.argv[0])
>     method = getattr(stats_obj, name, None)
>     if callable(method):
>         stats_obj.name()              #  <------------HERE
>     else:
>         print "nope, not sure what you're after...."
> -----------
> 
> However, as I'm sure you've all noticed already, there is no method
> called "name". I would really prefer to get a nudge in the right
> direction before I start evaling variables and so on.
> 
> Does my approach make sense? If not, please give me a hint...

You are almost there. Why don't you do

 if callable(method):
    method()

? 

Diez



More information about the Python-list mailing list