[Python-checkins] r54870 - peps/trunk/pep-3119.txt
guido.van.rossum
python-checkins at python.org
Wed Apr 18 20:39:32 CEST 2007
Author: guido.van.rossum
Date: Wed Apr 18 20:39:32 2007
New Revision: 54870
Modified:
peps/trunk/pep-3119.txt
Log:
Add spec for abc module. Add more sections but with temporary contents.
Modified: peps/trunk/pep-3119.txt
==============================================================================
--- peps/trunk/pep-3119.txt (original)
+++ peps/trunk/pep-3119.txt Wed Apr 18 20:39:32 2007
@@ -94,6 +94,86 @@
to enforce that these promises are kept.
+Specification
+=============
+
+The specification follows the four categories listed in the abstract:
+
+* An "ABC support framework" which defines a metaclass, a base class,
+ a decorator, and some helpers that make it easy to define ABCs.
+ This will be added as a new library module named "abc".
+
+* Specific ABCs for containers and iterators, to be added to the
+ collections module.
+
+* Specific ABCs for numbers, to be added to a new module, yet to be
+ named.
+
+* Guidelines for writing additional ABCs.
+
+
+ABC Support Framework
+---------------------
+
+The abc module will define some utilities that help defining ABCs.
+These are:
+
+``@abstractmethod``
+ A decorator to be used to declare abstract methods. This should
+ only be used with classes whose metaclass is (or is derived from)
+ ``AbstractClass`` below. A class containing at least one method
+ declared with this decorator that hasn't been overridden yet
+ cannot be instantiated. Such a methods may be called from the
+ overriding method in the subclass (using ``super`` or direct
+ invocation).
+
+``Abstract``
+ A class implementing the constraint that it or its subclasses
+ cannot be instantiated unless each abstract method has been
+ overridden. Its metaclass is ``AbstractClass``. Note: being
+ derived from ``Abstract`` does not make a class abstract; the
+ abstract-ness is decided on a per-class basis, depending on
+ whether all methods defined with ``@abstractmethod`` have been
+ overridden.
+
+``AbstractClass``
+ The metaclass of Abstract (and all classes derived from it). Its
+ purpose is to collect the information during the class
+ construction stage. It derives from ``type``.
+
+``AbstractInstantiationError``
+ The exception raised when attempting to instantiate an abstract
+ class. It derives from ``TypeError``.
+
+
+ABCs for Containers and Iterators
+---------------------------------
+
+XXX define: Iterable, Iterator, Sizeable (or Lengthy?), various Sets,
+Mappings, Sequences. Also Hashable so we can define Immutable (which
+adds to "read-only", does not subtract from "mutable", nor does
+"mutable" add to "hashable" -- it adds to "read-only"). Also defines
+how set, frozenset, list, tuple, dict, bytes and str derive from
+these.
+
+
+ABCs for Numbers
+----------------
+
+XXX define: Number, Complex, Real, Rational, Integer. Do we have a
+use case for Cardinal (Integer >= 0)? Do we need Indexable (converts
+to Integer using __index__).
+
+
+Guidelines for Writing ABCs
+---------------------------
+
+XXX E.g. use @abstractmethod and Abstract base class; define abstract
+methods that could be useful as an end point when called via a super
+chain; keep abstract classes small, one per use case instead of one
+per concept.
+
+
References
==========
More information about the Python-checkins
mailing list