:mod:`pyclbr` --- Python class browser support
==============================================

.. module:: pyclbr
   :synopsis: Supports information extraction for a Python class browser.
.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>

**Source code:** :source:`Lib/pyclbr.py`

--------------

The :mod:`pyclbr` module can be used to determine some limited information
about the classes, methods and top-level functions defined in a module.  The
information provided is sufficient to implement a traditional three-pane
class browser.  The information is extracted from the source code rather
than by importing the module, so this module is safe to use with untrusted
code.  This restriction makes it impossible to use this module with modules
not implemented in Python, including all standard and optional extension
modules.


.. function:: readmodule(module, path=None)

   Read a module and return a dictionary mapping class names to class
   descriptor objects.  The parameter *module* should be the name of a
   module as a string; it may be the name of a module within a package.  The
   *path* parameter should be a sequence, and is used to augment the value
   of ``sys.path``, which is used to locate module source code.


.. function:: readmodule_ex(module, path=None)

   Like :func:`readmodule`, but the returned dictionary, in addition to
   mapping class names to class descriptor objects, also maps top-level
   function names to function descriptor objects.  Moreover, if the module
   being read is a package, the key ``'__path__'`` in the returned
   dictionary has as its value a list which contains the package search
   path.


.. _pyclbr-class-objects:

Class Objects
-------------

The :class:`Class` objects used as values in the dictionary returned by
:func:`readmodule` and :func:`readmodule_ex` provide the following data
attributes:


.. attribute:: Class.module

   The name of the module defining the class described by the class descriptor.


.. attribute:: Class.name

   The name of the class.


.. attribute:: Class.super

   A list of :class:`Class` objects which describe the immediate base
   classes of the class being described.  Classes which are named as
   superclasses but which are not discoverable by :func:`readmodule` are
   listed as a string with the class name instead of as :class:`Class`
   objects.


.. attribute:: Class.methods

   A dictionary mapping method names to line numbers.


.. attribute:: Class.file

   Name of the file containing the ``class`` statement defining the class.


.. attribute:: Class.lineno

   The line number of the ``class`` statement within the file named by
   :attr:`~Class.file`.


.. _pyclbr-function-objects:

Function Objects
----------------

The :class:`Function` objects used as values in the dictionary returned by
:func:`readmodule_ex` provide the following attributes:


.. attribute:: Function.module

   The name of the module defining the function described by the function
   descriptor.


.. attribute:: Function.name

   The name of the function.


.. attribute:: Function.file

   Name of the file containing the ``def`` statement defining the function.


.. attribute:: Function.lineno

   The line number of the ``def`` statement within the file named by
   :attr:`~Function.file`.

