[Python-checkins] cpython: Issue #16049: add abc.ABC helper class.
andrew.svetlov
python-checkins at python.org
Thu Dec 13 18:09:46 CET 2012
http://hg.python.org/cpython/rev/9347869d1066
changeset: 80840:9347869d1066
user: Andrew Svetlov <andrew.svetlov at gmail.com>
date: Thu Dec 13 19:09:33 2012 +0200
summary:
Issue #16049: add abc.ABC helper class.
Patch by Bruno Dupuis.
files:
Doc/library/abc.rst | 18 ++++++++++++++----
Lib/abc.py | 6 ++++++
Lib/test/test_abc.py | 13 +++++++++++++
Misc/NEWS | 3 +++
4 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst
--- a/Doc/library/abc.rst
+++ b/Doc/library/abc.rst
@@ -12,9 +12,9 @@
--------------
This module provides the infrastructure for defining :term:`abstract base
-classes <abstract base class>` (ABCs) in Python, as outlined in :pep:`3119`; see the PEP for why this
-was added to Python. (See also :pep:`3141` and the :mod:`numbers` module
-regarding a type hierarchy for numbers based on ABCs.)
+classes <abstract base class>` (ABCs) in Python, as outlined in :pep:`3119`;
+see the PEP for why this was added to Python. (See also :pep:`3141` and the
+:mod:`numbers` module regarding a type hierarchy for numbers based on ABCs.)
The :mod:`collections` module has some concrete classes that derive from
ABCs; these can, of course, be further derived. In addition the
@@ -23,7 +23,7 @@
hashable or a mapping.
-This module provides the following class:
+This module provides the following classes:
.. class:: ABCMeta
@@ -127,6 +127,16 @@
available as a method of ``Foo``, so it is provided separately.
+.. class:: ABC
+
+ A helper class that has :class:`ABCMeta` as metaclass. :class:`ABC` is the
+ standard class to inherit from in order to create an abstract base class,
+ avoiding sometimes confusing metaclass usage.
+
+ Note that :class:`ABC` type is still :class:`ABCMeta`, therefore inheriting
+ from :class:`ABC` requires usual precautions regarding metaclasses usage
+ as multiple inheritance may lead to metaclass conflicts.
+
The :mod:`abc` module also provides the following decorators:
.. decorator:: abstractmethod
diff --git a/Lib/abc.py b/Lib/abc.py
--- a/Lib/abc.py
+++ b/Lib/abc.py
@@ -226,3 +226,9 @@
# No dice; update negative cache
cls._abc_negative_cache.add(subclass)
return False
+
+class ABC(metaclass=ABCMeta):
+ """Helper class that provides a standard way to create an ABC using
+ inheritance.
+ """
+ pass
diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py
--- a/Lib/test/test_abc.py
+++ b/Lib/test/test_abc.py
@@ -96,6 +96,19 @@
class TestABC(unittest.TestCase):
+ def test_ABC_helper(self):
+ # create an ABC using the helper class and perform basic checks
+ class C(abc.ABC):
+ @classmethod
+ @abc.abstractmethod
+ def foo(cls): return cls.__name__
+ self.assertEqual(type(C), abc.ABCMeta)
+ self.assertRaises(TypeError, C)
+ class D(C):
+ @classmethod
+ def foo(cls): return super().foo()
+ self.assertEqual(D.foo(), 'D')
+
def test_abstractmethod_basics(self):
@abc.abstractmethod
def foo(self): pass
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -163,6 +163,9 @@
Library
-------
+- Add abc.ABC class to use inheritance rather than a direct invocation of
+ ABCMeta metaclass. Patch by Bruno Dupuis.
+
- Expose the TCP_FASTOPEN and MSG_FASTOPEN flags in socket when they're
available.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list