Commit c46759ad authored by Raymond Hettinger's avatar Raymond Hettinger

Issue #11333: Add __slots__ to the collections ABCs.

parent 7969d333
...@@ -46,6 +46,8 @@ dict_proxy = type(type.__dict__) ...@@ -46,6 +46,8 @@ dict_proxy = type(type.__dict__)
class Hashable(metaclass=ABCMeta): class Hashable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod @abstractmethod
def __hash__(self): def __hash__(self):
return 0 return 0
...@@ -63,6 +65,8 @@ class Hashable(metaclass=ABCMeta): ...@@ -63,6 +65,8 @@ class Hashable(metaclass=ABCMeta):
class Iterable(metaclass=ABCMeta): class Iterable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod @abstractmethod
def __iter__(self): def __iter__(self):
while False: while False:
...@@ -78,6 +82,8 @@ class Iterable(metaclass=ABCMeta): ...@@ -78,6 +82,8 @@ class Iterable(metaclass=ABCMeta):
class Iterator(Iterable): class Iterator(Iterable):
__slots__ = ()
@abstractmethod @abstractmethod
def __next__(self): def __next__(self):
raise StopIteration raise StopIteration
...@@ -109,6 +115,8 @@ Iterator.register(zip_iterator) ...@@ -109,6 +115,8 @@ Iterator.register(zip_iterator)
class Sized(metaclass=ABCMeta): class Sized(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod @abstractmethod
def __len__(self): def __len__(self):
return 0 return 0
...@@ -123,6 +131,8 @@ class Sized(metaclass=ABCMeta): ...@@ -123,6 +131,8 @@ class Sized(metaclass=ABCMeta):
class Container(metaclass=ABCMeta): class Container(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod @abstractmethod
def __contains__(self, x): def __contains__(self, x):
return False return False
...@@ -137,6 +147,8 @@ class Container(metaclass=ABCMeta): ...@@ -137,6 +147,8 @@ class Container(metaclass=ABCMeta):
class Callable(metaclass=ABCMeta): class Callable(metaclass=ABCMeta):
__slots__ = ()
@abstractmethod @abstractmethod
def __call__(self, *args, **kwds): def __call__(self, *args, **kwds):
return False return False
...@@ -164,6 +176,8 @@ class Set(Sized, Iterable, Container): ...@@ -164,6 +176,8 @@ class Set(Sized, Iterable, Container):
then the other operations will automatically follow suit. then the other operations will automatically follow suit.
""" """
__slots__ = ()
def __le__(self, other): def __le__(self, other):
if not isinstance(other, Set): if not isinstance(other, Set):
return NotImplemented return NotImplemented
...@@ -275,6 +289,8 @@ Set.register(frozenset) ...@@ -275,6 +289,8 @@ Set.register(frozenset)
class MutableSet(Set): class MutableSet(Set):
__slots__ = ()
@abstractmethod @abstractmethod
def add(self, value): def add(self, value):
"""Add an element.""" """Add an element."""
...@@ -348,6 +364,8 @@ MutableSet.register(set) ...@@ -348,6 +364,8 @@ MutableSet.register(set)
class Mapping(Sized, Iterable, Container): class Mapping(Sized, Iterable, Container):
__slots__ = ()
@abstractmethod @abstractmethod
def __getitem__(self, key): def __getitem__(self, key):
raise KeyError raise KeyError
...@@ -451,6 +469,8 @@ ValuesView.register(dict_values) ...@@ -451,6 +469,8 @@ ValuesView.register(dict_values)
class MutableMapping(Mapping): class MutableMapping(Mapping):
__slots__ = ()
@abstractmethod @abstractmethod
def __setitem__(self, key, value): def __setitem__(self, key, value):
raise KeyError raise KeyError
...@@ -530,6 +550,8 @@ class Sequence(Sized, Iterable, Container): ...@@ -530,6 +550,8 @@ class Sequence(Sized, Iterable, Container):
__getitem__, and __len__. __getitem__, and __len__.
""" """
__slots__ = ()
@abstractmethod @abstractmethod
def __getitem__(self, index): def __getitem__(self, index):
raise IndexError raise IndexError
...@@ -575,12 +597,16 @@ class ByteString(Sequence): ...@@ -575,12 +597,16 @@ class ByteString(Sequence):
XXX Should add all their methods. XXX Should add all their methods.
""" """
__slots__ = ()
ByteString.register(bytes) ByteString.register(bytes)
ByteString.register(bytearray) ByteString.register(bytearray)
class MutableSequence(Sequence): class MutableSequence(Sequence):
__slots__ = ()
@abstractmethod @abstractmethod
def __setitem__(self, index, value): def __setitem__(self, index, value):
raise IndexError raise IndexError
......
...@@ -84,6 +84,8 @@ Library ...@@ -84,6 +84,8 @@ Library
- Issue #11371: Mark getopt error messages as localizable. Patch by Filip - Issue #11371: Mark getopt error messages as localizable. Patch by Filip
Gruszczyński. Gruszczyński.
- Issue #11333: Add __slots__ to collections ABCs.
- Issue #11628: cmp_to_key generated class should use __slots__ - Issue #11628: cmp_to_key generated class should use __slots__
- Issue #5537: Fix time2isoz() and time2netscape() functions of - Issue #5537: Fix time2isoz() and time2netscape() functions of
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment