On 10/24/2018 5:30 AM, Anders Hovmöller wrote:
Well that seems super unfortunate. You can opt out of the auto generate constructor and do it yourself:

   @dataclass(init=False)
   class Foo:
       foo: str
       bar: str = None
       baz: str

       def __init__(self, *, foo, bar = None, baz):
           self.foo = foo
           self.bar = bar
           self.baz = baz


   Foo(foo='a', bar='b', baz='c')

but this seems to take away from the utility of dataclasses. One could imagine there being a new argument to @dataclass that would make this work. Something like:


@dataclass(init_kwargs_only=True)
   class Foo:
       foo: str
       bar: str = None
       baz: str

where you would then get an auto generated constructor like with keyword only arguments. Personally I think this should have been the default, but it's at least a nice addition now.

https://bugs.python.org/issue33129

I definitely wouldn't want this to be the default. And as you say, it's too late anyway.

I haven't decided how the interaction of per-field and whole class versions of keyword-only should operate.

Eric

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to