@@ -156,15 +156,18 @@ http://svn.python.org/view/tracker/importer/.
156156
157157.. seealso ::
158158
159- http://bugs.python.org: The Python bug tracker.
159+ http://bugs.python.org
160+ The Python bug tracker.
160161
161- http://bugs.jython.org: The Jython bug tracker.
162+ http://bugs.jython.org:
163+ The Jython bug tracker.
162164
163- http://roundup.sourceforge.net/: Roundup downloads and documentation.
165+ http://roundup.sourceforge.net/
166+ Roundup downloads and documentation.
164167
165168
166- New Documentation Format: ReStructured Text
167- --------------------------------------------------
169+ New Documentation Format: ReStructured Text Using Sphinx
170+ -----------------------------------------------------------
168171
169172Since the Python project's inception around 1989, the documentation
170173had been written using LaTeX. At that time, most documentation was
@@ -191,16 +194,20 @@ The input format is reStructured Text,
191194a markup commonly used in the Python community that supports
192195custom extensions and directives. Sphinx concentrates
193196on HTML output, producing attractively styled
194- and modern HTML, but printed output is still supported through
195- conversion to LaTeX as an output format.
197+ and modern HTML, though printed output is still supported through
198+ conversion to LaTeX. Sphinx is a standalone package that
199+ can be used in documenting other projects.
196200
197201.. seealso ::
198202
199- `Docutils <http://docutils.sf.net >`__: The fundamental
200- reStructured Text parser and toolset.
203+ :ref: `documenting-index `
204+ Describes how to write for Python's documentation.
205+
206+ `Sphinx <http://sphinx.pocoo.org/ >`__
207+ Documentation and code for the Sphinx toolchain.
201208
202- :ref: ` documenting-index `: Describes how to write for
203- Python's documentation .
209+ ` Docutils < http://docutils.sf.net >`__
210+ The underlying reStructured Text parser and toolset .
204211
205212
206213PEP 343: The 'with' statement
@@ -487,8 +494,7 @@ can now be used in scripts running from inside a package.
487494 .. seealso::
488495
489496 :pep:`370` - XXX
490-
491- PEP written by XXX; implemented by Christian Heimes.
497+ PEP written by XXX; implemented by Christian Heimes.
492498
493499
494500.. ======================================================================
@@ -633,9 +639,8 @@ PEP 3105: ``print`` As a Function
633639=====================================================
634640
635641The ``print `` statement becomes the :func: `print ` function in Python 3.0.
636- Making :func: `print ` a function makes it easier to replace within a
637- module by doing 'def print(...)' or importing a new
638- function from somewhere else.
642+ Making :func: `print ` a function makes it easier to change
643+ by doing 'def print(...)' or importing a new function from somewhere else.
639644
640645Python 2.6 has a ``__future__ `` import that removes ``print `` as language
641646syntax, letting you use the functional form instead. For example::
@@ -750,13 +755,50 @@ XXX write this.
750755PEP 3118: Revised Buffer Protocol
751756=====================================================
752757
753- The buffer protocol is a C-level API that lets Python extensions
754- XXX
758+ The buffer protocol is a C-level API that lets Python types
759+ exchange pointers into their internal representations. A
760+ memory-mapped file can be viewed as a buffer of characters, for
761+ example, and this lets another module such as :mod: `re `
762+ treat memory-mapped files as a string of characters to be searched.
763+
764+ The primary users of the buffer protocol are numeric-processing
765+ packages such as NumPy, which can expose the internal representation
766+ of arrays so that callers can write data directly into an array instead
767+ of going through a slower API. This PEP updates the buffer protocol in light of experience
768+ from NumPy development, adding a number of new features
769+ such as indicating the shape of an array,
770+ locking memory .
771+
772+ The most important new C API function is
773+ ``PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags) ``, which
774+ takes an object and a set of flags, and fills in the
775+ ``Py_buffer `` structure with information
776+ about the object's memory representation. Objects
777+ can use this operation to lock memory in place
778+ while an external caller could be modifying the contents,
779+ so there's a corresponding
780+ ``PyObject_ReleaseBuffer(PyObject *obj, Py_buffer *view) `` to
781+ indicate that the external caller is done.
782+
783+ The **flags ** argument to :cfunc: `PyObject_GetBuffer ` specifies
784+ constraints upon the memory returned. Some examples are:
785+
786+ * :const: `PyBUF_WRITABLE ` indicates that the memory must be writable.
787+
788+ * :const: `PyBUF_LOCK ` requests a read-only or exclusive lock on the memory.
789+
790+ * :const: `PyBUF_C_CONTIGUOUS ` and :const: `PyBUF_F_CONTIGUOUS `
791+ requests a C-contiguous (last dimension varies the fastest) or
792+ Fortran-contiguous (first dimension varies the fastest) layout.
793+
794+ .. XXX this feature is not in 2.6 docs yet
755795
756796 .. seealso ::
757797
758798 :pep: `3118 ` - Revising the buffer protocol
759- PEP written by Travis Oliphant and Carl Banks.
799+ PEP written by Travis Oliphant and Carl Banks; implemented by
800+ Travis Oliphant.
801+
760802
761803.. ======================================================================
762804
@@ -765,41 +807,142 @@ XXX
765807PEP 3119: Abstract Base Classes
766808=====================================================
767809
768- XXX write this -- this section is currently just brief notes.
810+ Some object-oriented languages such as Java support interfaces: declarations
811+ that a class has a given set of methods or supports a given access protocol.
812+ Abstract Base Classes (or ABCs) are an equivalent feature for Python. The ABC
813+ support consists of an :mod: `abc ` module containing a metaclass called
814+ :class: `ABCMeta `, special handling
815+ of this metaclass by the :func: `isinstance ` and :func: `issubclass ` built-ins,
816+ and a collection of basic ABCs that the Python developers think will be widely
817+ useful.
818+
819+ Let's say you have a particular class and wish to know whether it supports
820+ dictionary-style access. The phrase "dictionary-style" is vague, however.
821+ It probably means that accessing items with ``obj[1] `` works.
822+ Does it imply that setting items with ``obj[2] = value `` works?
823+ Or that the object will have :meth: `keys `, :meth: `values `, and :meth: `items `
824+ methods? What about the iterative variants such as :meth: `iterkeys `? :meth: `copy `
825+ and :meth: `update `? Iterating over the object with :func: `iter `?
826+
827+ Python 2.6 includes a number of different ABCs in the :mod: `collections `
828+ module. :class: `Iterable ` indicates that a class defines :meth: `__iter__ `,
829+ and :class: `Container ` means the class supports ``x in y `` expressions
830+ by defining a :meth: `__contains__ ` method. The basic dictionary interface of
831+ getting items, setting items, and
832+ :meth: `keys `, :meth: `values `, and :meth: `items `, is defined by the
833+ :class: `MutableMapping ` ABC.
834+
835+ You can derive your own classes from a particular ABC
836+ to indicate they support that ABC's interface::
837+
838+ import collections
839+
840+ class Storage(collections.MutableMapping):
841+ ...
769842
770- How to identify a file object?
771843
772- ABCs are a collection of classes describing various interfaces.
773- Classes can derive from an ABC to indicate they support that ABC's
774- interface. Concrete classes should obey the semantics specified by
775- an ABC, but Python can't check this; it's up to the implementor.
844+ Alternatively, you could write the class without deriving from
845+ the desired ABC and instead register the class by
846+ calling the ABC's :meth: `register ` method::
776847
777- A metaclass lets you declare that an existing class or type
778- derives from a particular ABC. You can even
848+ import collections
849+
850+ class Storage:
851+ ...
852+
853+ collections.MutableMapping.register(Storage)
854+
855+ For classes that you write, deriving from the ABC is probably clearer.
856+ The :meth: `register ` method is useful when you've written a new
857+ ABC that can describe an existing type or class, or if you want
858+ to declare that some third-party class implements an ABC.
859+ For example, if you defined a :class: `PrintableType ` ABC,
860+ it's legal to do:
861+
862+ # Register Python's types
863+ PrintableType.register(int)
864+ PrintableType.register(float)
865+ PrintableType.register(str)
866+
867+ Classes should obey the semantics specified by an ABC, but
868+ Python can't check this; it's up to the class author to
869+ understand the ABC's requirements and to implement the code accordingly.
870+
871+ To check whether an object supports a particular interface, you can
872+ now write::
873+
874+ def func(d):
875+ if not isinstance(d, collections.MutableMapping):
876+ raise ValueError("Mapping object expected, not %r" % d)
877+
878+ (Don't feel that you must now begin writing lots of checks as in the
879+ above example. Python has a strong tradition of duck-typing, where
880+ explicit type-checking isn't done and code simply calls methods on
881+ an object, trusting that those methods will be there and raising an
882+ exception if they aren't. Be judicious in checking for ABCs
883+ and only do it where it helps.)
884+
885+ You can write your own ABCs by using ``abc.ABCMeta `` as the
886+ metaclass in a class definition::
887+
888+ from abc import ABCMeta
889+
890+ class Drawable():
891+ __metaclass__ = ABCMeta
892+
893+ def draw(self, x, y, scale=1.0):
894+ pass
779895
780- class AppendableSequence :
781- __metaclass__ = ABCMeta
896+ def draw_doubled(self, x, y) :
897+ self.draw(x, y, scale=2.0)
782898
783- AppendableSequence.register(list)
784- assert issubclass(list, AppendableSequence)
785- assert isinstance([], AppendableSequence)
899+
900+ class Square(Drawable):
901+ def draw(self, x, y, scale):
902+ ...
786903
787- @abstractmethod decorator -- you can't instantiate classes w/
788- an abstract method.
904+
905+ In the :class: `Drawable ` ABC above, the :meth: `draw_doubled ` method
906+ renders the object at twice its size and can be implemented in terms
907+ of other methods described in :class: `Drawable `. Classes implementing
908+ this ABC therefore don't need to provide their own implementation
909+ of :meth: `draw_doubled `, though they can do so. An implementation
910+ of :meth: `draw ` is necessary, though; the ABC can't provide
911+ a useful generic implementation. You
912+ can apply the ``@abstractmethod `` decorator to methods such as
913+ :meth: `draw ` that must be implemented; Python will
914+ then raise an exception for classes that
915+ don't define the method::
916+
917+ class Drawable():
918+ __metaclass__ = ABCMeta
919+
920+ @abstractmethod
921+ def draw(self, x, y, scale):
922+ pass
923+
924+ Note that the exception is only raised when you actually
925+ try to create an instance of a subclass without the method::
926+
927+ >>> s=Square()
928+ Traceback (most recent call last):
929+ File "<stdin>", line 1, in <module>
930+ TypeError: Can't instantiate abstract class Square with abstract methods draw
931+ >>>
789932
790- ::
933+ Abstract data attributes can be declared using the `` @abstractproperty `` decorator ::
791934
792- @abstractproperty decorator
793935 @abstractproperty
794936 def readonly(self):
795937 return self._x
796938
939+ Subclasses must then define a :meth: `readonly ` property
797940
798941.. seealso ::
799942
800943 :pep: `3119 ` - Introducing Abstract Base Classes
801944 PEP written by Guido van Rossum and Talin.
802- Implemented by XXX .
945+ Implemented by Guido van Rossum .
803946 Backported to 2.6 by Benjamin Aranguren, with Alex Martelli.
804947
805948.. ======================================================================
0 commit comments