summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorAnthony Baxter <anthonybaxter@gmail.com>2004-08-02 06:10:11 (GMT)
committerAnthony Baxter <anthonybaxter@gmail.com>2004-08-02 06:10:11 (GMT)
commitc2a5a636545a88f349dbe3e452ffb4494b68e534 (patch)
treeaaa24074dcdcce5afa51523969971bdd05381b01 /Doc
parentfd7dc5169c3ca7d64109512f38762c4ce9e96c5f (diff)
downloadcpython-c2a5a636545a88f349dbe3e452ffb4494b68e534.zip
cpython-c2a5a636545a88f349dbe3e452ffb4494b68e534.tar.gz
cpython-c2a5a636545a88f349dbe3e452ffb4494b68e534.tar.bz2
PEP-0318, @decorator-style. In Guido's words:
"@ seems the syntax that everybody can hate equally" Implementation by Mark Russell, from SF #979728.
Diffstat (limited to 'Doc')
-rw-r--r--Doc/lib/asttable.tex6
-rw-r--r--Doc/lib/libfuncs.tex13
-rw-r--r--Doc/ref/ref7.tex27
3 files changed, 42 insertions, 4 deletions
diff --git a/Doc/lib/asttable.tex b/Doc/lib/asttable.tex
index 7f6ba9f..8a93abf 100644
--- a/Doc/lib/asttable.tex
+++ b/Doc/lib/asttable.tex
@@ -73,6 +73,9 @@
\lineiii{Continue}{}{}
\hline
+\lineiii{Decorators}{\member{nodes}}{List of function decorator expressions}
+\hline
+
\lineiii{Dict}{\member{items}}{}
\hline
@@ -101,7 +104,8 @@
\lineiii{}{\member{names}}{}
\hline
-\lineiii{Function}{\member{name}}{name used in def, a string}
+\lineiii{Function}{\member{decorators}}{\class{Decorators} or \code{None}}
+\lineiii{}{\member{name}}{name used in def, a string}
\lineiii{}{\member{argnames}}{list of argument names, as strings}
\lineiii{}{\member{defaults}}{list of default values}
\lineiii{}{\member{flags}}{xxx}
diff --git a/Doc/lib/libfuncs.tex b/Doc/lib/libfuncs.tex
index ff922d4..b3d3d30 100644
--- a/Doc/lib/libfuncs.tex
+++ b/Doc/lib/libfuncs.tex
@@ -109,10 +109,14 @@ def my_import(name):
\begin{verbatim}
class C:
+ @classmethod
def f(cls, arg1, arg2, ...): ...
- f = classmethod(f)
\end{verbatim}
+ The \code{@classmethod} form is a function decorator -- see the description
+ of function definitions in chapter 7 of the
+ \citetitle[../ref/ref.html]{Python Reference Manual} for details.
+
It can be called either on the class (such as \code{C.f()}) or on an
instance (such as \code{C().f()}). The instance is ignored except for
its class.
@@ -122,6 +126,7 @@ class C:
Class methods are different than \Cpp{} or Java static methods.
If you want those, see \function{staticmethod()} in this section.
\versionadded{2.2}
+ Function decorator syntax added in version 2.4.
\end{funcdesc}
\begin{funcdesc}{cmp}{x, y}
@@ -936,10 +941,14 @@ except NameError:
\begin{verbatim}
class C:
+ @staticmethod
def f(arg1, arg2, ...): ...
- f = staticmethod(f)
\end{verbatim}
+ The \code{@staticmethod} form is a function decorator -- see the description
+ of function definitions in chapter 7 of the
+ \citetitle[../ref/ref.html]{Python Reference Manual} for details.
+
It can be called either on the class (such as \code{C.f()}) or on an
instance (such as \code{C().f()}). The instance is ignored except
for its class.
diff --git a/Doc/ref/ref7.tex b/Doc/ref/ref7.tex
index 80ddc33..1d7b860 100644
--- a/Doc/ref/ref7.tex
+++ b/Doc/ref/ref7.tex
@@ -315,8 +315,12 @@ section~\ref{types}):
\begin{productionlist}
\production{funcdef}
- {"def" \token{funcname} "(" [\token{parameter_list}] ")"
+ {[\token{decorators}] "def" \token{funcname} "(" [\token{parameter_list}] ")"
":" \token{suite}}
+ \production{decorators}
+ {\token{decorator} ([NEWLINE] \token{decorator})* NEWLINE}
+ \production{decorator}
+ {"@" \token{dotted_name} ["(" [\token{argument_list} [","]] ")"]}
\production{parameter_list}
{(\token{defparameter} ",")*}
\productioncont{("*" \token{identifier} [, "**" \token{identifier}]}
@@ -343,6 +347,27 @@ as the global namespace to be used when the function is called.
The function definition does not execute the function body; this gets
executed only when the function is called.
+A function definition may be wrapped by one or more decorator expressions.
+Decorator expressions are evaluated when the function is defined, in the scope
+that contains the function definition. The result must be a callable,
+which is invoked with the function object as the only argument.
+The returned value is bound to the function name instead of the function
+object. If there are multiple decorators, they are applied in reverse
+order. For example, the following code:
+
+\begin{verbatim}
+@f1
+@f2
+def func(): pass
+\end{verbatim}
+
+is equivalent to:
+
+\begin{verbatim}
+def func(): pass
+func = f2(f1(func))
+\end{verbatim}
+
When one or more top-level parameters have the form \var{parameter}
\code{=} \var{expression}, the function is said to have ``default
parameter values.'' For a parameter with a