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/