dynamic call of a function

Ignacio Vazquez-Abrams ignacio at openservices.net
Fri Oct 19 05:21:00 EDT 2001


On Fri, 19 Oct 2001, Luigi Ballabio wrote:

> At 10:37 AM 10/19/01 +0200, anthony harel wrote:
> >Is it possible to make dynamic call of a function whith python ?
> >
> >I have got a string that contains the name of the function I
> >want to call but I don't want to do something like this :
> >
> >if ch == "foo" :
> >     self.foo( )
> >elif ch == "bar"
> >     self.bar( )
> >....
>
> Anthony,
>          here are two ways to do it---I don't know which is the best, nor
> whether the best is yet another. Also, you might want to put in some error
> checking.
>
> class Test:
>      def foo(self):
>          print 'Norm!'
>      def bar(self):
>          print 'Dum-de-dum'
>      def dynCall1(self,methodName):
>          eval('self.%s()' % methodName)
>      def dynCall2(self,methodName):
>          method = vars(self.__class__)[methodName]
>          method(self)
>
>  >>> t = Test()
>  >>> t.dynCall1('foo')
> Norm!
>  >>> t.dynCall2('bar')
> Dum-de-dum

Actually, there's another way: getattr(obj, 'func')(...).

-- 
Ignacio Vazquez-Abrams  <ignacio at openservices.net>

   "As far as I can tell / It doesn't matter who you are /
    If you can believe there's something worth fighting for."
       - "Parade", Garbage





More information about the Python-list mailing list