[Tutor] tricky eval() problem

Kent Johnson kent37 at tds.net
Fri Jul 22 21:56:04 CEST 2005


Marcus Goldfish wrote:
> Here's a noodler I could use some help on: I need a class that can
> call a user-specified function with arbitrary (unknown) parameter
> lists.  The trick, here, is that the user will dynamically specify the
> funciton to invoke, and each function may differ in the number of
> parameters passed during the call.  For instance, suppose I define two
> dummy functions with different calling signatures:
> 
> def foo1(a1, a2, a3):
>    ...
> 
> def foo2(a1):
>   ...
> 
> Then I seek a class, Caller
> 
> class Caller(object):
>    def execute(self, method, *parms):
>       # some way to execute method
> 
> That can be used in the following manner:
> 
> 
>>>c = Caller();
>>>c.execute("foo1", 8, 9, 10)
>>>c.execute("foo2", "me")
> 
> 
> Any tips on tackling this?

Something like this:
def execute(self, method, *parms):
  fn = locals().get(method) or globals.get(method)
  if fn:
    fn(*parms)

Seems like there should be a better way of looking up method but I can't think of it right now...if method is an instance method of Caller then you could use
  fn = getattr(self, method)
(which will raise AttributeError if there is no such method)

Kent



More information about the Tutor mailing list