From eb6f50ecff20e088f4bbf84ac88fd8e464829e16 Mon Sep 17 00:00:00 2001 From: NiumXp Date: Tue, 12 Oct 2021 11:47:29 -0300 Subject: [PATCH 1/2] add hide parameter in dataclass field --- Lib/dataclasses.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 1e98bf9b9bb97ba..5df1bccd84ff1c9 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -260,6 +260,7 @@ class Field: 'compare', 'metadata', 'kw_only', + 'hide', '_field_type', # Private: not to be used by user code. ) @@ -277,6 +278,7 @@ def __init__(self, default, default_factory, init, repr, hash, compare, if metadata is None else types.MappingProxyType(metadata)) self.kw_only = kw_only + self.hide = hide self._field_type = None def __repr__(self): @@ -291,6 +293,7 @@ def __repr__(self): f'compare={self.compare!r},' f'metadata={self.metadata!r},' f'kw_only={self.kw_only!r},' + f'hide={self.hide!r}' f'_field_type={self._field_type}' ')') @@ -344,7 +347,8 @@ def __repr__(self): # so that a type checker can be told (via overloads) that this is a # function whose type depends on its parameters. def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, - hash=None, compare=True, metadata=None, kw_only=MISSING): + hash=None, compare=True, metadata=None, kw_only=MISSING, + hide=False): """Return an object to identify dataclass fields. default is the default value of the field. default_factory is a @@ -364,7 +368,7 @@ def field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, if default is not MISSING and default_factory is not MISSING: raise ValueError('cannot specify both default and default_factory') return Field(default, default_factory, init, repr, hash, compare, - metadata, kw_only) + metadata, kw_only, hide) def _fields_in_init_order(fields): From 26b8a964f49bd5f498c9c60a0b24de2945424870 Mon Sep 17 00:00:00 2001 From: NiumXp Date: Tue, 12 Oct 2021 11:55:08 -0300 Subject: [PATCH 2/2] add to ignore hided fields in dataclasses --- Lib/dataclasses.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 5df1bccd84ff1c9..21b66b7eb7dbd2a 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1240,6 +1240,8 @@ def _asdict_inner(obj, dict_factory): if _is_dataclass_instance(obj): result = [] for f in fields(obj): + if f.hide: + continue value = _asdict_inner(getattr(obj, f.name), dict_factory) result.append((f.name, value)) return dict_factory(result) @@ -1305,6 +1307,8 @@ def _astuple_inner(obj, tuple_factory): if _is_dataclass_instance(obj): result = [] for f in fields(obj): + if f.hide: + continue value = _astuple_inner(getattr(obj, f.name), tuple_factory) result.append(value) return tuple_factory(result)