def __init__(self, address, strict=True):
_BaseV4.__init__(self, address)<EOL>_BaseNetwork.__init__(self, address)<EOL>if isinstance(address, bytes):<EOL><INDENT>self.network_address = IPv4Address(address)<EOL>self._prefixlen = self._max_prefixlen<EOL>self.netmask = IPv4Address(self._ALL_ONES)<EOL>return<EOL><DEDENT>if isinstance(address, _compat_int_types):<EOL><INDENT>self.network_address = IPv4Address(address)<EOL>self._prefixlen = self._max_prefixlen<EOL>self.netmask = IPv4Address(self._ALL_ONES)<EOL>return<EOL><DEDENT>addr = _split_optional_netmask(address)<EOL>self.network_address = IPv4Address(self._ip_int_from_string(addr[<NUM_LIT:0>]))<EOL>if len(addr) == <NUM_LIT:2>:<EOL><INDENT>mask = addr[<NUM_LIT:1>].split('<STR_LIT:.>')<EOL>if len(mask) == <NUM_LIT:4>:<EOL><INDENT>if self._is_valid_netmask(addr[<NUM_LIT:1>]):<EOL><INDENT>self.netmask = IPv4Address(self._ip_int_from_string(<EOL>addr[<NUM_LIT:1>]))<EOL><DEDENT>elif self._is_hostmask(addr[<NUM_LIT:1>]):<EOL><INDENT>self.netmask = IPv4Address(<EOL>self._ip_int_from_string(addr[<NUM_LIT:1>]) ^ self._ALL_ONES)<EOL><DEDENT>else:<EOL><INDENT>raise NetmaskValueError('<STR_LIT>'<EOL>% addr[<NUM_LIT:1>])<EOL><DEDENT>self._prefixlen = self._prefix_from_ip_int(int(self.netmask))<EOL><DEDENT>else:<EOL><INDENT>if not self._is_valid_netmask(addr[<NUM_LIT:1>]):<EOL><INDENT>raise NetmaskValueError('<STR_LIT>'<EOL>% addr[<NUM_LIT:1>])<EOL><DEDENT>self._prefixlen = int(addr[<NUM_LIT:1>])<EOL>self.netmask = IPv4Address(self._ip_int_from_prefix(<EOL>self._prefixlen))<EOL><DEDENT><DEDENT>else:<EOL><INDENT>self._prefixlen = self._max_prefixlen<EOL>self.netmask = IPv4Address(self._ip_int_from_prefix(<EOL>self._prefixlen))<EOL><DEDENT>if strict:<EOL><INDENT>if (IPv4Address(int(self.network_address) & int(self.netmask)) !=<EOL>self.network_address):<EOL><INDENT>raise ValueError('<STR_LIT>' % self)<EOL><DEDENT><DEDENT>self.network_address = IPv4Address(int(self.network_address) &<EOL>int(self.netmask))<EOL>if self._prefixlen == (self._max_prefixlen - <NUM_LIT:1>):<EOL><INDENT>self.hosts = self.__iter__<EOL><DEDENT>
Instantiate a new IPv4 network object.

        Args:
            address: A string or integer representing the IP [& network].
              '192.0.2.0/24'
              '192.0.2.0/255.255.255.0'
              '192.0.0.2/0.0.0.255'
              are all functionally the same in IPv4. Similarly,
              '192.0.2.1'
              '192.0.2.1/255.255.255.255'
              '192.0.2.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.0.2.1') == IPv4Network(3221225985)
              or, more generally
              IPv4Interface(int(IPv4Interface('192.0.2.1'))) ==
                IPv4Interface('192.0.2.1')

        Raises:
            AddressValueError: If ipaddress isn't a valid IPv4 address.
            NetmaskValueError: If the netmask isn't valid for
              an IPv4 address.
            ValueError: If strict is True and a network address is not
              supplied.