>> Say I have class A: >> >> class A: >> def myMethod( self ): >> print 'foo' >> >> a = A() > > getattr(a, 'myMethod')() > > The getattr() call gets the bound method, the extra parentheses at the > end call it.
Hi Bernard, You can also do this in a controlled manner by treating the methods as functions, and using a dispatch table. Concretely: ######################################################### class TestDispatch: def add(self, x, y): return x + y def sub(self, x, y): return x - y def dontcallme(self): return "oh no" def dispatch(self, msg, *args): table = {"add" : self.add, "sub" : self.sub} if msg in table: return table[msg](*args) print "Unrecognized message:", msg return None def test(): calc = TestDispatch() msg = None while msg != 'quit': msg = raw_input('cmd? ') print calc.dispatch(msg, 3, 4) ######################################################### Try running test(), and then enter either "add" or "sub" at the prompt. This approach differs from getattr() because we can prevent clients from calling dontcallme() by excluding it from our dispatch table, so it's more controlled. Also, it's a techinque that's pretty programming-language agnostic. However, it is a little more verbose than the equivalent getattr()-driven code. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor