[Python-Dev] PEP 3144 review.

Steven D'Aprano steve at pearwood.info
Thu Sep 17 20:26:41 CEST 2009


On Thu, 17 Sep 2009 05:15:16 pm Andrew McNamara wrote:

> Conceptually, you sometimes need a bare address, and other times,
> you need an address with an associated network (host interface
> configs, router configs, etc). By AddressWithMask, I really mean 
> AddressWithEnoughInformationToDeriveNetworkWhenNeeded. Conveniently,
> IPv4 and IPv6 addressing allows us to derive the network from the
> host address combined with the netmask - in other words, we don't
> have to attach a real Network object to Address objects until the
> user tries to access it, and then we derive it from the address and
> mask.

To clarify: when you say "derive the network" are you talking about the 
network (which is a container) or the network address = host_address & 
netmask (which is not a container)? I think you're referring to the 
later.

If there's need for address+netmask, does it need to be a separate 
class? Perhaps Address objects could simply have a netmask property, 
defaulting to None. If you need an "address with mask" object, you 
create an Address and set the mask:

addr = Address(...)
addr.netmask = "255.255.255.0"

The caller is responsible for ensuring the netmask has been set before 
trying to use it:

network_address = addr & addr.netmask



> If you have a .network attribute on an address object, checking if an
> address is in the same network as another address becomes:
>
>     addr_a in addr_b.network
>
> As the module stands, you write that as:
>
>     addr_a in addr_b
>
> I don't think the intent is as clear with the later.

I would find the later completely unclear and disturbing -- how can one 
address contain another address?



-- 
Steven D'Aprano


More information about the Python-Dev mailing list