bpo-46066: Deprecate kwargs syntax for TypedDict definitions by 97littleleaf11 · Pull Request #31126 · python/cpython (original) (raw)
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation46 Commits11 Checks0 Files changed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
This comment was marked as resolved.
Surely this is a breaking change — even if type-checkers only understand the literal-dict assignment-based syntax, I'm not sure we can change the runtime behaviour like this without a deprecation period.
Yeah, it changes the typing module. However I seldom see this syntax in real-world projects since we already have class based one.
I am not really familiar with the cpython developing period. It's not a big deal since neither mypy nor other widely-used type checkers implement this feature and I barely see this syntax in real world projects.
Yeah, it changes the typing module. However I seldom see this syntax in real-world projects since we already have class based one.
I appreciate that — but given that this is a change to the stdlib, I think the standard deprecation policy probably still applies :)
For now, I think I would:
- Change the docs to state that this is deprecated in 3.11, will be removed in 3.13, and probably won't be understood by type checkers like mypy.
- Change the runtime behaviour to emit a warning if a user tries to construct a
TypedDict
with the kwargs-based syntax.
Here's an example of a previous PR deprecating features, that you could look to as an example: #23064
Co-authored-by: AlexWaygood Alex.Waygood@Gmail.com
97littleleaf11 changed the title
bpo-46066: Remove kwargs syntax for TypedDict definition bpo-46066: Deprecate kwargs syntax for TypedDict definitions
@@ -1976,6 +1976,7 @@ Masayuki Yamamoto |
---|
Ka-Ping Yee |
Chi Hsuan Yen |
Jason Yeo |
Jingchen Ye |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It feels absurd to bring this up (sorry!!), but: I think "Jingchen Ye" should go before "Ka-Ping Yee", if we're keeping this list alphabetised.
Also, it looks like there's some trailing whitespace in some of the documentation changes you've made, which is making the documentation-related tests fail -- could you possibly fix those issues?
@AlexWaygood Thanks for your reviews! btw, it seems that CI reports wrong line number about the trailing whitespace.
@AlexWaygood Thanks for your reviews!
No worries, it's a good PR!
btw, it seems that CI reports wrong line number about the trailing whitespace.
Huh — no idea what might be causing that :)
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
As this is a deprecation of an existing feature, I think it probably warrants a mention in "What's New in Python 3.11". I think @JelleZijlstra is planning on doing a PR for that document mentioning a bunch of recent changes to typing
, though, so perhaps he'll be kind enough to include a mention of this as well :)
@gvanrossum, could we possibly get the full test suite run on this PR, please? :)
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can't stand "firstly" and "secondly" for some reason. :-(
I can't stand "firstly" and "secondly" for some reason. :-(
How about "The first one" and "The other one"?
How about "The first one" and "The other one"?
Probably, a bullet list will be better. Like this:
[...] syntactic forms:
- using a literal dict as the second argument:
Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})
- using keyword arguments:
Point2D = TypedDict('Point2D', x=int, y=int, label=str)
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here's a concrete wording suggestion that avoids "Firstly" and "Secondly"
Comment on lines 1391 to 1393
support :pep:`526`, ``TypedDict`` supports two additional equivalent |
---|
syntactic forms:: |
syntactic forms. Firstly, using a literal :class:`dict` as the |
second argument:: |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this!
Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) |
---|
Secondly, using keyword arguments:: |
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Secondly, using keyword arguments:: |
---|
Keyword arguments may also be used:: |
I was just hoping to see “first“ and “second”. No “ly” needed, these are flat adverbs.
In a few days Jelle can likely merge this himself. :-)