def repr_dec(cls):
    """Replace the __repr__ function of a given class with the repr_wrapper.

    When a class is decorated with this function each instance of that class
    will print a list of it's attributes along with that attributes type.
    Hopefully this will make navigating through class instances easier.

    Parameters
    ----------
    cls : class

    Returns
    -------
    cls : class
        With modified __repr__ function.
    """
    def repr_wrapper(self):
        """Show all attributes.
        """
        # Create a list of attributes.
        keys = sorted(list(self.__dict__.keys()))
        # Create a list of the attribute values types.
        value_types = list(map(lambda x: type(x).__name__, [self.__dict__[i] for i in keys]))
        # Zip the two lists above into a dict.
        att_dict = dict(zip(keys, value_types))
        # Create the template string for all the reaults.
        template = "{}: {}\n"
        # Create the results string.
        result = type(self).__name__+" Attributes\n"
        # Create a fancy border for the results.
        result += (len(result)-1)*"-" + "\n"
        # For every key and value in att_dict...
        for k,v in att_dict.items():
            # Format them and concatenate to result.
            result += template.format(k, v)
        return result

    # Replace the classes __repr__ function.
    cls.__repr__ = repr_wrapper
    return cls