More accurate dataclasses.dataclass overloads (#14095)

This commit is contained in:
Max Muoto
2025-05-20 21:54:51 -05:00
committed by GitHub
parent f60b86e49c
commit 0b1ee9378d
2 changed files with 59 additions and 4 deletions
@@ -91,6 +91,16 @@ def check_other_isdataclass_overloads(x: type, y: object) -> None:
dc.replace(y)
class _D: ...
custom_dc = dc.dataclass(_D, init=True)
assert_type(custom_dc, type[_D])
custom_dc_2 = dc.dataclass(None, init=True)(_D)
assert_type(custom_dc_2, type[_D])
# Regression test for #11653
D = dc.make_dataclass(
"D", [("a", Union[int, None]), "y", ("z", Annotated[FrozenSet[bytes], "metadata"], dc.field(default=frozenset({b"foo"})))]
+49 -4
View File
@@ -71,14 +71,28 @@ def asdict(obj: DataclassInstance, *, dict_factory: Callable[[list[tuple[str, An
def astuple(obj: DataclassInstance) -> tuple[Any, ...]: ...
@overload
def astuple(obj: DataclassInstance, *, tuple_factory: Callable[[list[Any]], _T]) -> _T: ...
@overload
def dataclass(cls: None, /) -> Callable[[type[_T]], type[_T]]: ...
@overload
def dataclass(cls: type[_T], /) -> type[_T]: ...
if sys.version_info >= (3, 11):
@overload
def dataclass(
cls: type[_T],
/,
*,
init: bool = True,
repr: bool = True,
eq: bool = True,
order: bool = False,
unsafe_hash: bool = False,
frozen: bool = False,
match_args: bool = True,
kw_only: bool = False,
slots: bool = False,
weakref_slot: bool = False,
) -> type[_T]: ...
@overload
def dataclass(
cls: None = None,
/,
*,
init: bool = True,
repr: bool = True,
@@ -95,6 +109,23 @@ if sys.version_info >= (3, 11):
elif sys.version_info >= (3, 10):
@overload
def dataclass(
cls: type[_T],
/,
*,
init: bool = True,
repr: bool = True,
eq: bool = True,
order: bool = False,
unsafe_hash: bool = False,
frozen: bool = False,
match_args: bool = True,
kw_only: bool = False,
slots: bool = False,
) -> type[_T]: ...
@overload
def dataclass(
cls: None = None,
/,
*,
init: bool = True,
repr: bool = True,
@@ -110,6 +141,20 @@ elif sys.version_info >= (3, 10):
else:
@overload
def dataclass(
cls: type[_T],
/,
*,
init: bool = True,
repr: bool = True,
eq: bool = True,
order: bool = False,
unsafe_hash: bool = False,
frozen: bool = False,
) -> type[_T]: ...
@overload
def dataclass(
cls: None = None,
/,
*,
init: bool = True,
repr: bool = True,