[Python-checkins] r55054 - peps/trunk/pep-0000.txt peps/trunk/pep-3129.txt

collin.winter python-checkins at python.org
Tue May 1 20:31:52 CEST 2007


Author: collin.winter
Date: Tue May  1 20:31:51 2007
New Revision: 55054

Added:
   peps/trunk/pep-3129.txt
Modified:
   peps/trunk/pep-0000.txt
Log:
Add PEP 3129, 'Class Decorators'.

Modified: peps/trunk/pep-0000.txt
==============================================================================
--- peps/trunk/pep-0000.txt	(original)
+++ peps/trunk/pep-0000.txt	Tue May  1 20:31:51 2007
@@ -127,6 +127,7 @@
  S  3126  Remove Implicit String Concatenation         Jewett
  S  3127  Integer Literal Support and Syntax           Maupin
  S  3128  BList: A Faster List-like Type               Stutzbach
+ S  3129  Class Decorators                             Winter
  S  3141  A Type Hierarchy for Numbers                 Yasskin
 
  Finished PEPs (done, implemented in Subversion)
@@ -496,6 +497,7 @@
  S  3126  Remove Implicit String Concatenation         Jewett
  S  3127  Integer Literal Support and Syntax           Maupin
  S  3128  BList: A Faster List-like Type               Stutzbach
+ S  3129  Class Decorators                             Winter
  S  3141  A Type Hierarchy for Numbers                 Yasskin
 
 

Added: peps/trunk/pep-3129.txt
==============================================================================
--- (empty file)
+++ peps/trunk/pep-3129.txt	Tue May  1 20:31:51 2007
@@ -0,0 +1,117 @@
+PEP: 3129
+Title: Class Decorators
+Version: $Revision: 53815 $
+Last-Modified: $Date: 2007-04-27 16:42:06 -0700 (Fri, 27 Apr 2007) $
+Author: Collin Winter <collinw at gmail.com>
+Status: Draft
+Type: Standards Track
+Content-Type: text/x-rst
+Created: 1-May-2007
+Python-Version: 3.0
+Post-History:
+
+
+Abstract
+========
+
+This PEP proposes class decorators, an extension to the function
+and method decorators introduced in PEP 318.
+
+
+Rationale
+=========
+
+When function decorators were originally debated for inclusion in
+Python 2.4, class decorators were seen as obscure and unnecessary
+[#obscure]_ thanks to metaclasses.  After several years' experience
+with the Python 2.4.x series of releases and an increasing
+familiarity with function decorators and their uses, the BDFL and
+the community re-evaluated class decorators and recommended their
+inclusion in Python 3.0 [#approval]_.
+
+The motivating use-case was to make certain constructs more easily
+expressed and less reliant on implementation details of the CPython
+interpreter.  While it is possible to express class decorator-like
+functionality using metaclasses, the results are generally
+unpleasant and the implementation highly fragile [#motivation]_.  The
+fact that large-scale Python projects like Zope were going through
+these wild contortions to achieve something like class decorators won
+over the BDFL.
+
+
+Semantics
+=========
+
+The semantics and design goals of class decorators are the same as
+for function decorators ([#semantics]_, [#goals]_); the only
+difference is that you're decorating a class instead of a function.
+The following two snippets are semantically identical: ::
+
+  class A:
+    pass
+  A = foo(bar(A))
+  
+  
+  @foo
+  @bar
+  class A:
+    pass
+    
+For a detailed examination of decorators, please refer to PEP 318.
+
+
+Implementation
+==============
+
+The grammar for class declarations changes from ::
+
+  classdef: 'class' NAME ['(' [testlist] ')'] ':' suite
+  
+to ::
+
+  classdef: [decorators] 'class' NAME ['(' [testlist] ')'] ':' suite
+
+The Python AST and bytecode must be modified accordingly.
+
+A reference implementation [#implementation]_ has been provided by
+Jack Diederich.
+
+
+References
+==========
+
+.. [#obscure]
+   http://www.python.org/dev/peps/pep-0318/#motivation
+   
+.. [#approval]
+   http://mail.python.org/pipermail/python-dev/2006-March/062942.html
+   
+.. [#motivation]
+   http://mail.python.org/pipermail/python-dev/2006-March/062888.html
+   
+.. [#semantics]
+   http://www.python.org/dev/peps/pep-0318/#current-syntax
+
+.. [#goals]
+   http://www.python.org/dev/peps/pep-0318/#design-goals
+   
+.. [#implementation]
+   http://python.org/sf/1671208
+   
+
+
+Copyright
+=========
+
+This document has been placed in the public domain.
+
+
+
+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:


More information about the Python-checkins mailing list