code: def fix_docs(cls):
      
      import inspect
      public_undocumented_members = {name: func for name, func in inspect.getmembers(cls)
                                     if not name.startswith('_') and func.__doc__ is None}
  
      for name, func in public_undocumented_members.items():
          for parent in cls.__mro__[1:]:
              parfunc = getattr(parent, name, None)
              if parfunc and getattr(parfunc, '__doc__', None):
                  if isinstance(func, property):
                      # copy property, since its doc attribute is read-only
                      new_prop = property(fget=func.fget, fset=func.fset,
                                          fdel=func.fdel, doc=parfunc.__doc__)
                      setattr(cls, name, new_prop)
                  else:
                      if hasattr(func, '__func__'):  # handle instancemethods
                          func.__func__.__doc__ = parfunc.__doc__
                      else:
                          func.__doc__ = parfunc.__doc__
                  break
      return cls
docs: copies docstrings of derived attributes (methods, properties, attrs) from parent classes.