[Tutor] Ask a class for it's methods

Alan Gauld alan.gauld at btinternet.com
Sat Dec 13 00:41:38 CET 2008

"Shrutarshi Basu" <technorapture at gmail.com> wrote

>I have a list containing strings like :
> func1[]
> func2[1,2]
> func3[blah]
> I want to turn them into method calls (with numeric or string
> arguments) on a supplied object.

The easiest way is to call getattr() which will return a reference
to the method if it exists.

> be rather complex (mainly graphics manipulation) I would like to 
> start
> by getting a list of the object's methods and make sure that all the
> strings are valid.

Why not just handle it using try/except?
Thats exactly what exceptions were designed for.

> Is there a way to ask an object for a list of it's
> methods (with argument requirements if possible)?

You can try dir() but that won't give you the parameters.
But again try/except can catch an invalid call and you can detect
whether the number of parameters is wrong in the except clause.

> method name (say func1)  in a variable, say var, could I do
> object.var() and have if call the func1 method in object?

no, but you can do this:

>>> class C:
...     def f(self, x): print x
>>> c = C()
>>> dir(c)
['__doc__', '__module__', 'f']
>>> m = getattr(c,'f')
>>> m(42)
>>> try: m(43,'foo')
... except TypeError:
...     # parse the error message here
...     print 'Method of', c, 'takes ??? arguments'
Method of <__main__.C instance at 0x01BF8350> takes ??? arguments


Alan Gauld
Author of the Learn to Program web site

More information about the Tutor mailing list