[Tutor] Ask a class for it's methods

Andreas Kostyrka andreas at kostyrka.org
Sat Dec 13 10:19:34 CET 2008


On Sat, Dec 13, 2008 at 08:03:10AM +0000, Lie Ryan wrote:
> On Sat, 13 Dec 2008 02:59:34 +0100, Andreas Kostyrka wrote:
> 
> > On Fri, Dec 12, 2008 at 06:06:35PM -0500, Shrutarshi Basu 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. I'm trying to figure out the best way
> >> to do this. Since these lists could be very big, and the methods could
> >> 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. Is there a way to ask an object for a list of it's
> >> methods (with argument requirements if possible)?
> >
> > Well, there are ways, but they are not reliable by design. Objects can
> > return dynamically methods.
> > 
> > So use something like this:
> > 
> > if callable(getattr(obj, "func1")):
> >     # func1 exists.
> > 
> > Guess nowaday with Python3 released, you should not use callable, but
> > instead test on __call__
> > 
> > if hasattr(getattr(obj, "func1"), "__call__"):
> 
> or the more pythonic version would just call func() and catch exception 
> if it's not callable:
> 
> try:
>     func1()
> except TypeError:
>     print "func1 is not callable"

But it happens to be wrong :)

Consider:

def func1():
    raise TypeError("except does not care where in the callstack the exception happens!!!")

Common sources, IMHE, for TypeErrors include int(not_a_string_or_number), which raises a TypeError.

Andreas


More information about the Tutor mailing list