From bd728fbfae18395c37d9fd020e31b1d4f30c6136 Mon Sep 17 00:00:00 2001 From: Stephen Morton Date: Wed, 18 Dec 2024 10:21:31 -0800 Subject: [PATCH] use `Literal[_MISSING_TYPE.MISSING]` for dataclasses.field defaults (#13256) --- stdlib/@tests/stubtest_allowlists/common.txt | 2 -- stdlib/dataclasses.pyi | 14 +++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/stdlib/@tests/stubtest_allowlists/common.txt b/stdlib/@tests/stubtest_allowlists/common.txt index 8ce325eb4..6a254f7f7 100644 --- a/stdlib/@tests/stubtest_allowlists/common.txt +++ b/stdlib/@tests/stubtest_allowlists/common.txt @@ -330,8 +330,6 @@ _?ctypes.Union.__getattr__ # doesn't exist, but makes things easy if we pretend # These would ideally be special-cased by type checkers; see https://github.com/python/mypy/issues/2220 _?ctypes.Array.__iter__ -dataclasses.field # White lies around defaults - # __all__-related weirdness (see #6523) email.__all__ email.base64mime diff --git a/stdlib/dataclasses.pyi b/stdlib/dataclasses.pyi index 3295b1c1f..3d89b8303 100644 --- a/stdlib/dataclasses.pyi +++ b/stdlib/dataclasses.pyi @@ -152,33 +152,37 @@ if sys.version_info >= (3, 10): def field( *, default: _T, + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> _T: ... @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., default_factory: Callable[[], _T], init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> _T: ... @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, compare: bool = True, metadata: Mapping[Any, Any] | None = None, - kw_only: bool = ..., + kw_only: bool | Literal[_MISSING_TYPE.MISSING] = ..., ) -> Any: ... else: @@ -186,6 +190,7 @@ else: def field( *, default: _T, + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None, @@ -195,6 +200,7 @@ else: @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., default_factory: Callable[[], _T], init: bool = True, repr: bool = True, @@ -205,6 +211,8 @@ else: @overload def field( *, + default: Literal[_MISSING_TYPE.MISSING] = ..., + default_factory: Literal[_MISSING_TYPE.MISSING] = ..., init: bool = True, repr: bool = True, hash: bool | None = None,