From 7dd4d0882da704afd6bec77aca99c88377eef742 Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Tue, 5 Jun 2018 16:57:20 +0100 Subject: [PATCH] Update return type of dataclasses.field (#2197) --- stdlib/3.7/dataclasses.pyi | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/stdlib/3.7/dataclasses.pyi b/stdlib/3.7/dataclasses.pyi index db0327335..de4fe69ca 100644 --- a/stdlib/3.7/dataclasses.pyi +++ b/stdlib/3.7/dataclasses.pyi @@ -31,20 +31,22 @@ class Field(Generic[_T]): metadata: Optional[Mapping[str, Any]] +# NOTE: Actual return type is 'Field[_T]', but we want to help type checkers +# to understand the magic that happens at runtime. @overload # `default` and `default_factory` are optional and mutually exclusive. def field(*, default: _T, init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., - metadata: Optional[Mapping[str, Any]] = ...) -> Field[_T]: ... + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... @overload def field(*, default_factory: Callable[[], _T], init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., - metadata: Optional[Mapping[str, Any]] = ...) -> Field[_T]: ... + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... @overload def field(*, init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., - metadata: Optional[Mapping[str, Any]] = ...) -> Field[Any]: ... + metadata: Optional[Mapping[str, Any]] = ...) -> Any: ... def fields(class_or_instance: Any) -> Tuple[Field[Any], ...]: ...