code: def _fill_inheritance(self):
          
          mro = filter(lambda c: c != self and isinstance(c, Class),
                       self.module.mro(self))
  
          def search(d, fdoc):
              for c in mro:
                  doc = fdoc(c)
                  if d.name in doc and isinstance(d, type(doc[d.name])):
                      return doc[d.name]
              return None
          for fdoc in (lambda c: c.doc_init, lambda c: c.doc):
              for d in fdoc(self).values():
                  dinherit = search(d, fdoc)
                  if dinherit is not None:
                      d.inherits = dinherit
  
          # Since instance variables aren't part of a class's members,
          # we need to manually deduce inheritance. Oh lawdy.
          for c in mro:
              for name in filter(lambda n: n not in self.doc_init, c.doc_init):
                  d = c.doc_init[name]
                  self.doc_init[name] = Variable(d.name, d.module, '', cls=self)
                  self.doc_init[name].inherits = d
docs: Traverses this class's ancestor list and attempts to fill in
          missing documentation from its ancestor's documentation.
  
          The first pass connects variables, methods and functions with
          their inherited couterparts. (The templates will decide how to
          display docstrings.) The second pass attempts to add instance
          variables to this class that were only explicitly declared in
          a parent class. This second pass is necessary since instance
          variables are only discoverable by traversing the abstract
          syntax tree.