def report(cls_instance) -> str:
    """Function for creating a report about an object.

    Returns a string that should describe all of the information needed to
    initialize an identical class. It should also contain complementary
    information that may be useful to the user. This function in itself only
    calls the class's ``report`` method, but, if none is defined, it will return
    a string with information about the object.

    The classes' ``report`` method shouldn't have any arguments.

    Args:
        cls_instance: The class instance we want to make a report of.

    Returns:
        A string with the report.

    """
    try:
        return cls_instance.report()
    except AttributeError:
        return f"{str(cls_instance)}\n{repr(cls_instance)}"