'Instantiate a new IPv6 address object.
Args:
address: A string or integer representing the IP
Additionally, an integer can be passed, so
IPv6Address(\'2001:4860::\') ==
IPv6Address(42541956101370907050197289607612071936L).
or, more generally
IPv6Address(IPv6Address(\'2001:4860::\')._ip) ==
IPv6Address(\'2001:4860::\')
Raises:
IPv6IpValidationError: If address isn\'t a valid IPv6 address.
IPv6NetmaskValidationError: If the netmask isn\'t valid for
an IPv6 address.'

def __init__(self, address):

    BaseIP.__init__(self, address)
    BaseV6.__init__(self, address)
    if isinstance(address, (int, long)):
        self._ip = address
        if ((address < 0) or (address > self._ALL_ONES)):
            raise IPv6IpValidationError(address)
        return
    if _compat_has_real_bytes:
        if (isinstance(address, bytes) and (len(address) == 16)):
            tmp = struct.unpack('!QQ', address)
            self._ip = ((tmp[0] << 64) | tmp[1])
            return
    addr_str = str(address)
    if (not addr_str):
        raise IPv6IpValidationError('')
    self._ip = self._ip_int_from_string(addr_str)
