Repository navigation
Closed
Labels
3.11only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-typingtype-featureA feature request or enhancementA feature request or enhancement
Description
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee = None
closed_at = None
created_at = <Date 2021-08-07.19:04:47.278>
labels = ['type-feature', 'library', '3.11']
title = 'Allow TypedDict to inherit from Generics'
updated_at = <Date 2022-03-07.00:48:26.270>
user = '/sransara'bugs.python.org fields:
activity = <Date 2022-03-07.00:48:26.270>
actor = 'rhettinger'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Library (Lib)']
creation = <Date 2021-08-07.19:04:47.278>
creator = 'sransara'
dependencies = []
files = []
hgrepos = []
issue_num = 44863
keywords = ['patch']
message_count = 8.0
messages = ['399201', '399579', '401077', '401087', '401134', '401138', '412439', '414631']
nosy_count = 12.0
nosy_names = ['gvanrossum', 'rhettinger', 'python-dev', 'serhiy.storchaka', 'graingert', 'JelleZijlstra', 'sobolevn', 'kj', 'AlexWaygood', 'sransara', 'cdce8p', 'toburger']
pr_nums = ['27663']
priority = 'normal'
resolution = None
stage = 'patch review'
status = 'open'
superseder = None
type = 'enhancement'
url = 'https://bugs.python.org/issue44863'
versions = ['Python 3.11']Reacted by Felipe S. S. Schneider and Jacob Stevens-Haas
Metadata
Metadata
Assignees
Labels
3.11only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-typingtype-featureA feature request or enhancementA feature request or enhancement
Activity
sransara commentedon Aug 7, 2021
TypedDict PEP-589 says:
A TypedDict cannot inherit from both a TypedDict type and a non-TypedDict base class.
So the current implementation has:
if type(base) is not _TypedDictMeta: raise TypeError(...)This restricts the user from defining generic TypedDicts in the natural class based syntax:
class Pager(TypedDict, Generic[T]): ...Although PEP-589 doesn't explicitly state generic support, I believe it is complete in covering the specification even if generics were involved (at least for the class based syntax).
I have tried putting together a PEP from guidance of typing-sig <https://github.com/sransara/py-generic-typeddict/blob/master/pep-9999.rst\>. There is not much new contributions by that draft, except for specifying the alternative syntax and being more explicit about Generics.
So I'm wondering if it would be possible to relax the constraint: TypedDict inheritance to include Generic. In my point of view
Genericis more of a mixin, so it doesn't go against the PEP-589. Or is this change big enough to warrant a PEP?gvanrossum commentedon Aug 14, 2021
See also python/mypy#3863
Fidget-Spinner commentedon Sep 5, 2021
Guido, OP has kindly written a mini PEP for this. Do you think just updating PEP-589 is sufficient, or do we need a full PEP?
(PS. Changed version to 3.11 since we've missed the train for 3.10 enhancements).
gvanrossum commentedon Sep 5, 2021
Updating an existing (standards track) PEP significantly is not
traditional. I recommend writing a new PEP.
On Sun, Sep 5, 2021 at 01:24 Ken Jin <report@bugs.python.org> wrote:
--
--Guido (mobile)
sransara commentedon Sep 6, 2021
My initial intention to create this ticket was to explore the idea that if we could side step from creating a PEP or updating PEP-589.
IMO only contribution from a new PEP will be:
Genericas a mixin even this is not needed)I believe PEP-589 is complete in covering all semantic details even with Generics. Even structural subtyping because it says: "Value types behave invariantly, since TypedDict objects are mutable."
My understanding was that during initial implementation this was not done for the sake of implementation simplicity (days before PEP-560).
All that said, a new PEP would be a good way to notify the type checkers of this capability.
Is there a better place to have this conversation?
gvanrossum commentedon Sep 6, 2021
Since this primarily affects static type checkers such as mypy, Pyre and pyright, it’s best to discuss it on typing-sig.
graingert commentedon Feb 3, 2022
there's a thread on typing-sig for this now: https://mail.python.org/archives/list/typing-sig@python.org/thread/I7P3ER2NH7SENVMIXK74U6L4Z5JDLQGZ/#I7P3ER2NH7SENVMIXK74U6L4Z5JDLQGZ
rhettinger commentedon Mar 7, 2022
Related issue: https://bugs.python.org/issue43923
JelleZijlstra commentedon May 3, 2022
This will be in Python 3.11 (#27663). Thanks @sransara for the PR and @serhiy-storchaka, @uriyyo, @Fidget-Spinner, @davidfstr, and @sobolevn for reviewing it!
Add support for generic TypedDict following python/cpython#89026
chore: add type annotations to woob.tools.value