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

Stephen J. Turnbull stephen at xemacs.org
Tue Sep 29 11🔞36 CEST 2009


Guido van Rossum writes:

I don't doubt that Peter has a use case for denormalized IPNetwork objects.

If you know what it is, would you please describe it, or say "that's proprietary"? Peter hasn't done either, despite repeated requests.

I do note that if Peter's use case is at all common, reducing the number of classes is a worthy goal, and Python has a bit of a history of preferring a small number of Swiss-army-knife classes over a multitude of simple classes.

Even if Peter's use case turns out to be at all common, two things bother me a lot.

First,

               IPv4Network(a) == IPv4Network(b)

has an obvious preferred interpretation as pseudocode.

Second, equality comparison for the "abuse" of a network class to represent host-with-network-info can be implemented cleanly[1] as

               x = IPv4Network(a)
               y = IPv4Network(b)
               (x.ip, x) == (y.ip, y)

as you've pointed out. It is self-documenting in that makes it plain that some things that are not "true networks" are being compared. OTOH,

     x = IPv4Network(a)
     y = IPv4Network(b)
     (x.network, x.prefixlen) == (y.network, y.prefixlen)
     # alternatively
     # list(x) == list(y)

looks like nothing so much as an incomplete implementation to me. It just makes me itch to provide the appropriate definitions of hash and equal for IPv4Network.

Do you feel differently?

Footnotes: [1] It's clean only if we assume you've accepted the "abuse", of course.



More information about the Python-Dev mailing list