Add spec for abc module. Add more sections but with temporary contents.

This commit is contained in:
Guido van Rossum 2007-04-18 18:39:32 +00:00
parent cbda3c2812
commit 2e759ec054
1 changed files with 80 additions and 0 deletions

View File

@ -94,6 +94,86 @@ gentlemen's agreement - which means that the language does not attempt
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
==========