function to return a list of all methods for an object
Peter Otten
__peter__ at web.de
Fri Mar 5 14:07:27 EST 2004
Kevin Altis wrote:
> I need a way of getting a list of all the methods for an object. I want
> the unbound methods for the objects class for some further manipulation.
> My old way of doing this did a recursive iteration over __bases__ and the
> code seems sort of fragile, especially with multiple inheritance. I came
> up with a much simpler version that uses dir(), but would like a sanity
> check before committing to it. Perhaps there is a better way? This only
> needs to work with Python 2.2 and later, so I won't mind say "Doh!" if
> I've missed the obvious simple solution and someone points out my
> stupidity.
>
> # return a list of unbound methods for an object
> def getMethods(object):
> methods = []
> names = dir(object.__class__)
> for name in names:
> m = getattr(object.__class__, name)
> if isinstance(m, types.MethodType):
> #print "method:", m
> methods.append(m)
> return methods
Seems sensible...
> Here's the output:
> <__main__.E instance at 0x007EABC0> __main__.E
> B dummy
> [<unbound method E.dummy>,
> <unbound method E.fourD>,
> <unbound method E.oneA>,
> <unbound method E.threeC>,
> <unbound method E.twoB>]
... and works.
You might consider using inspect.getmembers() instead, which is implemented
in a similar fashion:
def getmembers(object, predicate=None):
results = []
for key in dir(object):
value = getattr(object, key)
if not predicate or predicate(value):
results.append((key, value))
results.sort()
return results
Providing the predicate is straightforward, so it all depends on wether you
like the (name, method) tuples instead of your method-only in the resulting
list.
Peter
More information about the Python-list
mailing list