bpo-43224: Fix Tuple[()].__args__ #31845
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Here's a fun inconsistency:
Even though there's an explicit test for the former behaviour, I don't think it's right:
foo.__args__
is(bar,)
, that says thatfoo
is being parameterised bybar
. When we doTuple[()]
, it's really just to get around the fact thatTuple[]
is invalid syntax - what we're really meaning to say is that we're not parameterising it with anything.Tuple[()].__args__
should therefore be empty.Tuple[...].__args__
should be a type.()
is not a type.This matters for PEP 646, where we were expecting that a
TypeVarTuple
with no arguments would expand to nothing rather than()
. If we were to change things so it was consistent with the current behaviour ofTuple[()]
, we'd havewhich definitely isn't what we want.
@ilevkivskyi who added the test for the former behaviour, according to the git blame. Is there something I'm missing here?
https://bugs.python.org/issue43224