On Tue, Mar 16, 2021 at 9:23 AM Eric V. Smith <e...@trueblade.com> wrote:

> On 3/16/2021 7:01 AM, Simão Afonso @ Powertools Tech wrote:
> >> The problem is that if you have 1 normal parameter and 10 keyword-only
> >> ones, you'd be forced to say:
> >>
> >> @dataclasses.dataclass
> >> class LotsOfFields:
> >>       a: Any
> >>       b: Any = field(kw_only=True, default=0)
> >>       c: Any = field(kw_only=True, default='foo')
> >>       d: Any = field(kw_only=True)
> >>       e: Any = field(kw_only=True, default=0.0)
> >>       f: Any = field(kw_only=True)
> >>       g: Any = field(kw_only=True, default=())
> >>       h: Any = field(kw_only=True, default='bar')
> >>       i: Any = field(kw_only=True, default=3+4j)
> >>       j: Any = field(kw_only=True, default=10)
> >>       k: Any = field(kw_only=True)
> >>
> >> That's way too verbose for me.
>

Here's another option I just thought of, that might have some strengths:

@dataclasses.dataclass
class LotsOfFields:
     #  first member assumed to be kw_or_posit unless marked otherwise
     a: Any
     #  start kw only here because `mark= dataclasses.KW_ONLY`
     b: Any = field(default=0, mark=dataclasses.KW_ONLY)
     #  all members following above line continue to be kw_only
     c: Any = 'foo'
     d: Any
     e: Any = 0.0
     f: Any
     g: Any = ()
     h: Any = 'bar'
     i: Any = 3+4j
     j: Any = 10
     k: Any

I changed the kw argument name from `kw_only` to `mark`.

The idea is that every supplied member (above, members c through k) is
assumed to have the same `mark` as the most recently explicitly designated
field (above, member b). Or, if there has not yet been an explicitly
designated `mark` for a member, the first field (above, member a) is
assumed to be `dataclasses.KW_OR_POSIT` (or whatever other singleton name
makes sense).

In this way we only have to use the field() call once, we can go back and
forth, we eliminate a line like `_:  dataclasses.KW_OPTIONAL` that to some
people might be a bit inscrutable, and we leave the door open to support
positional arguments in the future (perhaps through something like `mark=
dataclasses.KW_OR_POSIT`) if it becomes desirable for some reason.

---
Ricky.

"I've never met a Kentucky man who wasn't either thinking about going home
or actually going home." - Happy Chandler
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HDLXG5MOPYVTHTPQBEU4VPLL4OL3V3GS/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to