diff --git a/Lib/_collections_abc.py b/Lib/_collections_abc.py --- a/Lib/_collections_abc.py +++ b/Lib/_collections_abc.py @@ -6,7 +6,7 @@ Unit tests are in test_collections. """ -from abc import ABCMeta, abstractmethod +from abc import ABC, abstractmethod import sys __all__ = ["Hashable", "Iterable", "Iterator", @@ -54,7 +54,7 @@ ### ONE-TRICK PONIES ### -class Hashable(metaclass=ABCMeta): +class Hashable(ABC): __slots__ = () @@ -73,7 +73,7 @@ return NotImplemented -class Iterable(metaclass=ABCMeta): +class Iterable(ABC): __slots__ = () @@ -124,7 +124,7 @@ Iterator.register(tuple_iterator) Iterator.register(zip_iterator) -class Sized(metaclass=ABCMeta): +class Sized(ABC): __slots__ = () @@ -140,7 +140,7 @@ return NotImplemented -class Container(metaclass=ABCMeta): +class Container(ABC): __slots__ = () @@ -156,7 +156,7 @@ return NotImplemented -class Callable(metaclass=ABCMeta): +class Callable(ABC): __slots__ = () diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -6,6 +6,7 @@ from test import support import unittest from weakref import proxy +import abc import functools @@ -1038,12 +1039,12 @@ for haystack in permutations(bases): m = mro(dict, haystack) self.assertEqual(m, [dict, c.MutableMapping, c.Mapping, c.Sized, - c.Iterable, c.Container, object]) + c.Iterable, c.Container, abc.ABC, object]) bases = [c.Container, c.Mapping, c.MutableMapping, c.OrderedDict] for haystack in permutations(bases): m = mro(c.ChainMap, haystack) self.assertEqual(m, [c.ChainMap, c.MutableMapping, c.Mapping, - c.Sized, c.Iterable, c.Container, object]) + c.Sized, c.Iterable, c.Container, abc.ABC, object]) # If there's a generic function with implementations registered for # both Sized and Container, passing a defaultdict to it results in an @@ -1053,7 +1054,7 @@ for haystack in permutations(bases): m = mro(c.defaultdict, [c.Sized, c.Container, str]) self.assertEqual(m, [c.defaultdict, dict, c.Sized, c.Container, - object]) + abc.ABC, object]) # MutableSequence below is registered directly on D. In other words, it # preceeds MutableMapping which means single dispatch will always @@ -1067,7 +1068,7 @@ self.assertEqual(m, [D, c.MutableSequence, c.Sequence, c.defaultdict, dict, c.MutableMapping, c.Mapping, c.Sized, c.Iterable, c.Container, - object]) + abc.ABC, object]) # Container and Callable are registered on different base classes and # a generic function supporting both should always pick the Callable @@ -1079,7 +1080,7 @@ for haystack in permutations(bases): m = mro(C, haystack) self.assertEqual(m, [C, c.Callable, c.defaultdict, dict, c.Mapping, - c.Sized, c.Iterable, c.Container, object]) + c.Sized, c.Iterable, c.Container, abc.ABC, object]) def test_register_abc(self): c = collections @@ -1191,7 +1192,7 @@ class X(D, C, B): def __call__(self): pass # implies Callable - expected = [X, c.Callable, D, C, c.Container, B, c.Sized, A, object] + expected = [X, c.Callable, D, C, c.Container, B, c.Sized, abc.ABC, A, object] for abcs in permutations([c.Sized, c.Callable, c.Container]): self.assertEqual(mro(X, abcs=abcs), expected) # unrelated ABCs don't appear in the resulting MRO