[Python-Dev] PEP 3144 review.
Stephen J. Turnbull
stephen at xemacs.org
Tue Sep 29 11:18: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