import inspect


def signatures_union(
    init_sig: inspect.Signature, method_sig: inspect.Signature
) -> inspect.Signature:
    """Returns a Union of the constructor and method signature.

    Args:
        init_sig (inspect.Signature): Constructor signature
        method_sig (inspect.Signature): Method signature

    Returns:
        A Union of the the two Signatures as a single Signature
    """

    def key(param):
        # all params are keyword or positional
        # move the params without defaults to the front
        if param.default is inspect._empty:
            return -1
        return 1

    params = list(init_sig.parameters.values()
                 ) + list(method_sig.parameters.values())
    params.sort(key=key)
    return inspect.Signature(
        parameters=params, return_annotation=method_sig.return_annotation
    )