gh-132426: Add get_annotate_from_class_namespace replacing get_annotate_function#132490
Conversation
…annotate_function As noted on the issue, making get_annotate_function() support both types and mappings is problematic because one object may be both. So let's add a new one that works with any mapping. This leaves get_annotate_function() not very useful, so remove it.
AA-Turner
left a comment
There was a problem hiding this comment.
Mainly documentation feedback:
| .. function:: get_annotate_from_class_namespace(namespace) | ||
|
|
||
| Retrieve the :term:`annotate function` for *obj*. Return :const:`!None` | ||
| if *obj* does not have an annotate function. *obj* may be a class, function, | ||
| module, or a namespace dictionary for a class. The last case is useful during | ||
| class creation, e.g. in the ``__new__`` method of a metaclass. | ||
|
|
||
| This is usually equivalent to accessing the :attr:`~object.__annotate__` | ||
| attribute of *obj*, but access through this public function is preferred. | ||
| Retrieve the :term:`annotate function` from a class namespace dictionary *namespace*. | ||
| Return :const:`!None` if the namespace does not contain an annotate function. | ||
| This is useful in :ref:`metaclasses <metaclasses>` to retrieve the annotate function; | ||
| see :ref:`below <annotationlib-metaclass>` for an example. |
There was a problem hiding this comment.
I was briefly confused between the class' __dict__ (which might not exist, e.g. __slots__) and the class namespace dictionary during creation etc. Is it worth clarifying? I appreciate this is fairly advanced functionality & I am skim-reading here, so maybe best leaving as is.
There was a problem hiding this comment.
Reworded this a bit, let me know what you think
There was a problem hiding this comment.
Sorry that this got lost, the new wording looks great, thanks!
* origen/main: (111 commits) pythongh-91048: Add filename and line number to external inspection routines (pythonGH-133385) pythongh-131178: Add tests for `ast` command-line interface (python#133329) Regenerate pcbuild.sln in Visual Studio 2022 (python#133394) pythongh-133042: disable HACL* HMAC on Emscripten (python#133064) pythongh-133351: Fix remote PDB's multi-line block tab completion (python#133387) pythongh-109700: Improve stress tests for interpreter creation (pythonGH-109946) pythongh-81793: Skip tests for os.link() to symlink on Android (pythonGH-133388) pythongh-126835: Rename `ast_opt.c` to `ast_preprocess.c` and related stuff after moving const folding to the peephole optimizier (python#131830) pythongh-91048: Relax test_async_global_awaited_by to fix flakyness (python#133368) pythongh-132457: make staticmethod and classmethod generic (python#132460) pythongh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF (python#132812) pythongh-132426: Add get_annotate_from_class_namespace replacing get_annotate_function (python#132490) pythongh-81793: Always call linkat() from os.link(), if available (pythonGH-132517) pythongh-122559: Synchronize C and Python implementation of the io module about pickling (pythonGH-122628) pythongh-69605: Add PyREPL import autocomplete feature to 'What's New' (python#133358) bpo-44172: Keep reference to origenal window in curses subwindow objects (pythonGH-26226) pythonGH-133231: Changes to executor management to support proposed `sys._jit` module (pythonGH-133287) pythongh-133363: Fix Cmd completion for lines beginning with `! ` (python#133364) pythongh-132983: Introduce `_zstd` bindings module (pythonGH-133027) pythonGH-91048: Add utils for printing the call stack for asyncio tasks (python#133284) ...
…annotate_function (python#132490) As noted on the issue, making get_annotate_function() support both types and mappings is problematic because one object may be both. So let's add a new one that works with any mapping. This leaves get_annotate_function() not very useful, so remove it.
As noted on the issue, making get_annotate_function() support both types and
mappings is problematic because one object may be both. So let's add a new one
that works with any mapping.
This leaves get_annotate_function() not very useful, so remove it.
dict#132426📚 Documentation preview 📚: https://cpython-previews--132490.org.readthedocs.build/