Inheritance Queries

Alex Martelli aleaxit at yahoo.com
Fri Jul 13 08:21:49 EDT 2001


"Angel Asencio" <asencio at linus.mitre.org> wrote in message
news:9il5qp$iba$1 at top.mitre.org...
> Is there a package to get information about the inheritance of
> a class/instance?
>
> Methods or functions to answer questions like:
>
> Which are your decendants?
> Which are your ancestors?
> Who are your immediate decendants?
> Who are your immediate ancestors?

A class has absolutely no information about any
subclassing performed on it.  Conceptually, the
only way to gather such information at one point
in time would be to go through *all* classes
defined at that instant and check if the given
class is among the ancestors -- and I don't think
there's any sensible way to examine *all* classes
in existence at one time.

A class knows its immediate ancestors: they're
the __bases__ tuple attribute of the class object
(you get from an instance to its class via the
__class__ attribute of the instance object, of
course).  Non-immediate ancestors are obtained
through recursive walks up the inheritance DAG
(Directed Acyclic Graph).  Built-in function
issubclass() tells you, given any two classes
C1 and C2, whether C1 is a direct or indirect
subclass of C2.

Package inspect has no direct support for
inheritance information except for one function
that, given a bunch of class objects, places
them in a structure evidencing which class
inherited from which others.


Alex






More information about the Python-list mailing list