gh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF#132812
gh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF#132812JelleZijlstra merged 15 commits intopython:mainfrom
Conversation
|
This PR does mean that partial evaluations of the different ways of writing unions aren't quite equivalent. A union written with
This does make me think that perhaps the previous change to make If not, then perhaps the Example: from annotationlib import get_annotations, Format
class Ex1:
a: str | undefined
b: str | int | undefined
for k, v in get_annotations(Ex1, format=Format.FORWARDREF).items():
print(f"{k}: {v}")Footnotes
|
|
I sort of think that's correct: if we don't know what A and B are, we don't know what We could perhaps hide the |
My logic is more along the lines of - if a name can't be resolved it becomes a forward ref, anything that uses The other reasoning is that a runtime checker could use the partial information to know that an argument is valid in the case where you get a union, if the type is one of the elements that does resolve, but couldn't do so in the case where the entire statement is a forwardref. I'm not sure how common this case would be though.
I'm not sure about this one, I know the Footnotes
|
|
It still feels wrong to me to special-case just I'm actually not convinced |
|
That makes sense, it just bugs me that this means |
|
* origin/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 original 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) ...
…n FORWARDREF (python#132812) Co-authored-by: David C Ellis <ducksual@gmail.com>
Fixes #132805. Closes #132806. cc @DavidCEllis.