<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Eric Hopper wrote:
<blockquote TYPE=CITE>I want to get a dictionary of all functions accessible
in a class.
<br>Doing <class>.__dict__ only gets me the functions defined in that
class,
<br>not any of it's base classes.
<p>Is there a way to do this simply, or do I have to use __base__ to write
<br>my own scanner?</blockquote>
I already know I can do the following:
<p>-----
<br><tt>import types</tt><tt></tt>
<p><tt>def add_class_to_dict(cl, d, subadd):</tt>
<br><tt>   for basecl in cl.__bases__:</tt>
<br><tt>      subadd(basecl, d, subadd)</tt>
<br><tt>   for fn in dir(cl):</tt>
<br><tt>      if (type(cl.__dict__[fn]) == types.FunctionType):</tt>
<br><tt>         d[fn] = cl.__dict__[fn]</tt>
<br><tt> </tt>
<br><tt>def class_func_dict(c, subadd=add_class_to_dict):</tt>
<br><tt>   d = {}</tt>
<br><tt>   subadd(c, d, subadd)</tt>
<br><tt>   return(d)</tt><tt></tt>
<p><tt>del add_class_to_dict</tt>
<br>-----
<p>I was just hoping there'd be a better way. It seems to me that the code
is making assumptions about how class name lookup works that may now be
set in stone, but I'd still rather not rely on.
<p>It seems to me that if the code to do name lookups already exists that
it could be pressed into service to give you a complete dictionary of the
names available in a given class. If there isn't an interpreter hook for
this, then I guess I'll have to use the code above.
<p>(Yeah, it's kind of a hack to remove the 'add_class_to_dict' name from
the module.  I wish Python had better namespace control sometimes.)
<p>Thanks,
<br>--Eric Hopper
<br> </html>