mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
Enhance TypedDict docs around required/optional keys (#109547)
As discussed in comments to #109544, the semantics of this attribute are somewhat confusing. Add a note explaining its limitations and steering users towards __required_keys__ and __optional_keys__ instead.
This commit is contained in:
parent
74723e1110
commit
f49958c886
1 changed files with 15 additions and 0 deletions
|
|
@ -2404,6 +2404,13 @@ types.
|
|||
>>> Point3D.__total__
|
||||
True
|
||||
|
||||
This attribute reflects *only* the value of the ``total`` argument
|
||||
to the current ``TypedDict`` class, not whether the class is semantically
|
||||
total. For example, a ``TypedDict`` with ``__total__`` set to True may
|
||||
have keys marked with :data:`NotRequired`, or it may inherit from another
|
||||
``TypedDict`` with ``total=False``. Therefore, it is generally better to use
|
||||
:attr:`__required_keys__` and :attr:`__optional_keys__` for introspection.
|
||||
|
||||
.. attribute:: __required_keys__
|
||||
|
||||
.. versionadded:: 3.9
|
||||
|
|
@ -2439,6 +2446,14 @@ types.
|
|||
|
||||
.. versionadded:: 3.9
|
||||
|
||||
.. note::
|
||||
|
||||
If ``from __future__ import annotations`` is used or if annotations
|
||||
are given as strings, annotations are not evaluated when the
|
||||
``TypedDict`` is defined. Therefore, the runtime introspection that
|
||||
``__required_keys__`` and ``__optional_keys__`` rely on may not work
|
||||
properly, and the values of the attributes may be incorrect.
|
||||
|
||||
See :pep:`589` for more examples and detailed rules of using ``TypedDict``.
|
||||
|
||||
.. versionadded:: 3.8
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue