Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion Doc/reference/compound_stmts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ A function definition defines a user-defined function object (see section
funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")"
: ["->" `expression`] ":" `suite`
decorators: `decorator`+
decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE
decorator: "@" `assignment_expression` NEWLINE
dotted_name: `identifier` ("." `identifier`)*
parameter_list: `defparameter` ("," `defparameter`)* "," "/" ["," [`parameter_list_no_posonly`]]
: | `parameter_list_no_posonly`
Expand Down Expand Up @@ -550,6 +550,11 @@ is roughly equivalent to ::

except that the original function is not temporarily bound to the name ``func``.

.. versionchanged:: 3.9
Functions may be decorated with any valid :token:`assignment_expression`.
Previously, the grammar was much more restrictive; see :pep:`614` for
details.

.. index::
triple: default; parameter; value
single: argument; function definition
Expand Down Expand Up @@ -717,6 +722,11 @@ is roughly equivalent to ::
The evaluation rules for the decorator expressions are the same as for function
decorators. The result is then bound to the class name.

.. versionchanged:: 3.9
Classes may be decorated with any valid :token:`assignment_expression`.
Previously, the grammar was much more restrictive; see :pep:`614` for
details.

**Programmer's note:** Variables defined in the class definition are class
attributes; they are shared by instances. Instance attributes can be set in a
method with ``self.name = value``. Both class and instance attributes are
Expand Down
4 changes: 4 additions & 0 deletions Doc/whatsnew/3.9.rst
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ Other Language Changes
There are similar changes for :class:`bytes` and :class:`bytearray` objects.
(Contributed by Serhiy Storchaka in :issue:`28029`.)

* Any valid expression can now be used as a :term:`decorator`. Previously, the
grammar was much more restrictive. See :pep:`614` for details.
(Contributed by Brandt Bucher in :issue:`39702`.)


New Modules
===========
Expand Down