From 1891b30707f1906c4b57295cf6cda5d51217eac9 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Tue, 4 Mar 2025 18:15:00 +0300 Subject: [PATCH] [3.12] gh-129567: Add a note to typing.TypedDict docs about name mangling (GH-130233) --- Doc/library/typing.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 54a19ae0b6bebc..f176e750b0a293 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -2294,17 +2294,22 @@ types. The keyword-argument syntax is deprecated in 3.11 and will be removed in 3.13. It may also be unsupported by static type checkers. - The functional syntax should also be used when any of the keys are not valid - :ref:`identifiers `, for example because they are keywords or contain hyphens. - Example:: + This functional syntax allows defining keys which are not valid + :ref:`identifiers `, for example because they are + keywords or contain hyphens, or when key names must not be + :ref:`mangled ` like regular private names:: # raises SyntaxError class Point2D(TypedDict): in: int # 'in' is a keyword x-y: int # name with hyphens + class Definition(TypedDict): + __schema: str # mangled to `_Definition__schema` + # OK, functional syntax Point2D = TypedDict('Point2D', {'in': int, 'x-y': int}) + Definition = TypedDict('Definition', {'__schema': str}) # not mangled By default, all keys must be present in a ``TypedDict``. It is possible to mark individual keys as non-required using :data:`NotRequired`::