import typing


def identifier_path(it: typing.Union[typing.Type[object], typing.Callable]) -> str:
    """Generate an identifier based on an object's module and qualified name.  This can
    be useful such as for adding attributes to existing objects while minimizing odds
    of collisions and maximizing traceability of the related party.

    Args:
        it: The object to generate the identifer from.

    Returns:
        The generated identifier string.
    """
    return "__" + "_".join(it.__module__.split(".") + [it.__qualname__])