'Instantiate a new IPv4 network object.
Args:
address: A string or integer representing the IP [& network].
\'192.168.1.1/24\'
\'192.168.1.1/255.255.255.0\'
\'192.168.1.1/0.0.0.255\'
are all functionally the same in IPv4. Similarly,
\'192.168.1.1\'
\'192.168.1.1/255.255.255.255\'
\'192.168.1.1/32\'
are also functionaly equivalent. That is to say, failing to
provide a subnetmask will create an object with a mask of /32.
If the mask (portion after the / in the argument) is given in
dotted quad form, it is treated as a netmask if it starts with a
non-zero field (e.g. /255.0.0.0 == /8) and as a hostmask if it
starts with a zero field (e.g. 0.255.255.255 == /8), with the
single exception of an all-zero mask which is treated as a
netmask == /0. If no mask is given, a default of /32 is used.
Additionally, an integer can be passed, so
IPv4Network(\'192.168.1.1\') == IPv4Network(3232235777).
or, more generally
IPv4Network(int(IPv4Network(\'192.168.1.1\'))) ==
IPv4Network(\'192.168.1.1\')
strict: A boolean. If true, ensure that we have been passed
A true network address, eg, 192.168.1.0/24 and not an
IP address on a network, eg, 192.168.1.1/24.
Raises:
AddressValueError: If ipaddr isn\'t a valid IPv4 address.
NetmaskValueError: If the netmask isn\'t valid for
an IPv4 address.
ValueError: If strict was True and a network address was not
supplied.'

def __init__(self, address, strict=False):

    _BaseNet.__init__(self, address)
    _BaseV4.__init__(self, address)
    if isinstance(address, (int, long, Bytes)):
        self.ip = IPv4Address(address)
        self._ip = self.ip._ip
        self._prefixlen = self._max_prefixlen
        self.netmask = IPv4Address(self._ALL_ONES)
        return
    addr = str(address).split('/')
    if (len(addr) > 2):
        raise AddressValueError(address)
    self._ip = self._ip_int_from_string(addr[0])
    self.ip = IPv4Address(self._ip)
    if (len(addr) == 2):
        try:
            self._prefixlen = self._prefix_from_prefix_string(addr[1])
        except NetmaskValueError:
            self._prefixlen = self._prefix_from_ip_string(addr[1])
    else:
        self._prefixlen = self._max_prefixlen
    self.netmask = IPv4Address(self._ip_int_from_prefix(self._prefixlen))
    if strict:
        if (self.ip != self.network):
            raise ValueError(('%s    has    host    bits    set' % self.ip))
    if (self._prefixlen == (self._max_prefixlen - 1)):
        self.iterhosts = self.__iter__
