https://github.com/python/cpython/commit/50270fc9803283d9a7d12731e6d84012f3ef7b32 commit: 50270fc9803283d9a7d12731e6d84012f3ef7b32 branch: 3.12 author: sobolevn <m...@sobolevn.me> committer: sobolevn <m...@sobolevn.me> date: 2025-03-04T15:34:34Z summary:
[3.12] gh-129567: Add a note to typing.TypedDict docs about name mangling (GH-130233) (#130842) files: M Doc/library/typing.rst 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 <identifiers>`, for example because they are keywords or contain hyphens. - Example:: + This functional syntax allows defining keys which are not valid + :ref:`identifiers <identifiers>`, for example because they are + keywords or contain hyphens, or when key names must not be + :ref:`mangled <private-name-mangling>` 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`:: _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com