def METHOD_NAME(self):
    """
    Convert self into a url
    This function should more or less round-trip with :func:`.parse_url`. The
    returned url may not be exactly the same as the url inputted to
    :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls
    with a blank port will have : removed).
    Example: ::
        >>> U = parse_url('http://google.com/mail/')
        >>> U.url
        'http://google.com/mail/'
        >>> Url('http', 'username:password', 'host.com', 80,
        ... '/path', 'query', 'fragment').url
        'http://username:password@host.com:80/path?query#fragment'
    """
    scheme, auth, host, port, path, query, fragment = self
    METHOD_NAME = ''
    # We use "is not None" we want things to happen with empty strings (or 0 port)
    if scheme is not None:
        METHOD_NAME += scheme + '://'
    if auth is not None:
        METHOD_NAME += auth + '@'
    if host is not None:
        METHOD_NAME += host
    if port is not None:
        METHOD_NAME += ':' + str(port)
    if path is not None:
        METHOD_NAME += path
    if query is not None:
        METHOD_NAME += '?' + query
    if fragment is not None:
        METHOD_NAME += '#' + fragment
    return METHOD_NAME