mapping a string to an instancemethod

David C. Ullrich dullrich at sprynet.com
Fri Aug 1 14:52:21 EDT 2008


In article <7wIkk.16976$mh5.6016 at nlpi067.nbdc.sbc.com>, mh at pixar.com 
wrote:

> The following bit of code will allow an instance member to
> be called by reference.  How can I map a string (e.g.
> "hello1" or "Foo.hello1" to a the instance member?
> 
> class Foo:
>     def hello1(self, p):
>         print 'hello1', p
>     def hello2(self, p):
>         print 'hello2', p
>     def dispatch(self, func, p):
>         func(self,p)
> 
> f=Foo()
> f.dispatch(Foo.hello1, 23)
> f.dispatch(Foo.hello1, 24)
> 
> f.dispatch_as_string("hello1", 23)  ## this is what I want to do.

Do what's below. Then learn about *args to make a version that
works with variable numbers of parameters...

class Foo:
    def hello1(self, p):
        print 'hello1', p
    def hello2(self, p):
        print 'hello2', p
    def dispatch(self, func, p):
        func(self,p)
    def dispatch_as_string(self, funcname, p):
        getattr(self, funcname)(p)

f = Foo()
f.dispatch_as_string('hello1', 'world')

> Many TIA and apologies if this is a FAQ, I googled and couldn't
> find the answer.

-- 
David C. Ullrich



More information about the Python-list mailing list