summaryrefslogtreecommitdiff
path: root/Lib/ipaddress.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-03-07 20:08:34 +0200
committerSerhiy Storchaka <storchaka@gmail.com>2015-03-07 20:08:34 +0200
commita0e8e43d0c278ba5b4f034c7c39344bb821432cb (patch)
tree181a51b4198ca0c9acfbd4d6eb93fdfaf671cd41 /Lib/ipaddress.py
parenta60ad1fb7dd66b0c5e1cd0ed6ea74856d91236fe (diff)
downloadcpython-a0e8e43d0c278ba5b4f034c7c39344bb821432cb.tar.gz
Issue #23103: Reduced the memory consumption of IPv4Address and IPv6Address.
Diffstat (limited to 'Lib/ipaddress.py')
-rw-r--r--Lib/ipaddress.py25
1 files changed, 12 insertions, 13 deletions
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index 6c225f3037..be1ec5209b 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -386,6 +386,8 @@ class _IPAddressBase:
"""The mother class."""
+ __slots__ = ()
+
@property
def exploded(self):
"""Return the longhand version of the IP address as a string."""
@@ -543,6 +545,8 @@ class _BaseAddress(_IPAddressBase):
used by single IP addresses.
"""
+ __slots__ = ()
+
def __int__(self):
return self._ip
@@ -1051,6 +1055,8 @@ class _BaseV4:
"""
+ __slots__ = ()
+ _version = 4
# Equivalent to 255.255.255.255 or 32 bits of 1's.
_ALL_ONES = (2**IPV4LENGTH) - 1
_DECIMAL_DIGITS = frozenset('0123456789')
@@ -1063,9 +1069,6 @@ class _BaseV4:
# when constructed (see _make_netmask()).
_netmask_cache = {}
- def __init__(self, address):
- self._version = 4
-
def _explode_shorthand_ip_string(self):
return str(self)
@@ -1243,6 +1246,8 @@ class IPv4Address(_BaseV4, _BaseAddress):
"""Represent and manipulate single IPv4 Addresses."""
+ __slots__ = ('_ip', '__weakref__')
+
def __init__(self, address):
"""
@@ -1259,8 +1264,6 @@ class IPv4Address(_BaseV4, _BaseAddress):
AddressValueError: If ipaddress isn't a valid IPv4 address.
"""
- _BaseV4.__init__(self, address)
-
# Efficient constructor from integer.
if isinstance(address, int):
self._check_int_address(address)
@@ -1485,8 +1488,6 @@ class IPv4Network(_BaseV4, _BaseNetwork):
supplied.
"""
-
- _BaseV4.__init__(self, address)
_BaseNetwork.__init__(self, address)
# Constructing from a packed address or integer
@@ -1590,6 +1591,8 @@ class _BaseV6:
"""
+ __slots__ = ()
+ _version = 6
_ALL_ONES = (2**IPV6LENGTH) - 1
_HEXTET_COUNT = 8
_HEX_DIGITS = frozenset('0123456789ABCDEFabcdef')
@@ -1599,9 +1602,6 @@ class _BaseV6:
# when constructed (see _make_netmask()).
_netmask_cache = {}
- def __init__(self, address):
- self._version = 6
-
@classmethod
def _make_netmask(cls, arg):
"""Make a (netmask, prefix_len) tuple from the given argument.
@@ -1870,6 +1870,8 @@ class IPv6Address(_BaseV6, _BaseAddress):
"""Represent and manipulate single IPv6 Addresses."""
+ __slots__ = ('_ip', '__weakref__')
+
def __init__(self, address):
"""Instantiate a new IPv6 address object.
@@ -1887,8 +1889,6 @@ class IPv6Address(_BaseV6, _BaseAddress):
AddressValueError: If address isn't a valid IPv6 address.
"""
- _BaseV6.__init__(self, address)
-
# Efficient constructor from integer.
if isinstance(address, int):
self._check_int_address(address)
@@ -2180,7 +2180,6 @@ class IPv6Network(_BaseV6, _BaseNetwork):
supplied.
"""
- _BaseV6.__init__(self, address)
_BaseNetwork.__init__(self, address)
# Efficient constructor from integer or packed address