[Python-Dev] PEP 3144 review. (original) (raw)

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:

addra in addrb.network As the module stands, you write that as: addra in addrb 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