From dd99fb4ea05f979129ebee77a23704b6a6d32f7d Mon Sep 17 00:00:00 2001 From: ananthan-123 Date: Sat, 22 Feb 2020 23:26:02 +0530 Subject: [PATCH] bpo-17422: Language reference should specify restrictions on class namespace (GH-18559) The language reference now specifies restrictions on class namespaces. Adapted from a patch by Ethan Furman. (cherry picked from commit fbe2e0bb8a7ee75d0f9d57682436dac7d69e202e) Co-authored-by: ananthan-123 --- Doc/reference/datamodel.rst | 6 ++++-- .../Documentation/2020-02-19-11-13-47.bpo-17422.g7_9zz.rst | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Documentation/2020-02-19-11-13-47.bpo-17422.g7_9zz.rst diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index d25357db434689..b682465d3ddc87 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1932,10 +1932,12 @@ Once the appropriate metaclass has been identified, then the class namespace is prepared. If the metaclass has a ``__prepare__`` attribute, it is called as ``namespace = metaclass.__prepare__(name, bases, **kwds)`` (where the additional keyword arguments, if any, come from the class definition). The -``__prepare__`` method should be implemented as a :func:`classmethod`. +``__prepare__`` method should be implemented as a :func:`classmethod`. The +namespace returned by ``__prepare__`` is passed in to ``__new__``, but when +the final class object is created the namespace is copied into a new ``dict``. If the metaclass has no ``__prepare__`` attribute, then the class namespace -is initialised as an empty ordered mapping. +is initialised as an empty :func:`dict`. .. seealso:: diff --git a/Misc/NEWS.d/next/Documentation/2020-02-19-11-13-47.bpo-17422.g7_9zz.rst b/Misc/NEWS.d/next/Documentation/2020-02-19-11-13-47.bpo-17422.g7_9zz.rst new file mode 100644 index 00000000000000..f071d286176aee --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2020-02-19-11-13-47.bpo-17422.g7_9zz.rst @@ -0,0 +1 @@ +The language reference now specifies restrictions on class namespaces. Adapted from a patch by Ethan Furman.