code: def auto_repr(obj: Any, with_addr: bool = False,
                sort_attrs: bool = True, joiner: str = COMMA_SPACE) -> str:
      
      if sort_attrs:
          keys = sorted(obj.__dict__.keys())
      else:
          keys = obj.__dict__.keys()
      elements = ["{}={}".format(k, repr(getattr(obj, k))) for k in keys]
      return repr_result(obj, elements, with_addr=with_addr, joiner=joiner)
docs: Convenience function for :func:`__repr__`.
      Works its way through the object's ``__dict__`` and reports accordingly.
  
      Args:
          obj: object to display
          with_addr: include the memory address of ``obj``
          sort_attrs: sort the attributes into alphabetical order?
          joiner: string with which to join the elements
  
      Returns:
          string: :func:`repr`-style representation