On Tue, Apr 14, 2020 at 7:46 PM Ricky Teachey <ri...@teachey.org> wrote:
> For simple situations you can call super in the __post_init__ method and > things will work fine: > But not for the OP's case: he wanted to pass extra parameters in -- and the dataclass' __init__ won't accept extra arguments. -CHB > class BaseClass: > def __init__(self): > print("class BaseClass") > > @dataclass > class DataClass(BaseClass): > def __post_init__(self): > super().__init__() > print("class DataClass") > > class ChildClass(DataClass): > def __init__(self): > super().__init__() > print("class ChildClass") > > >>> ChildClass() > class BaseClass > class DataClass > class ChildClass > ChildClass() > > Note that this will break if you try to add a second dataclass to the > inheritance hierarchy using the same method: > > @dataclass > class BrokenClass(ChildClass): > def __post_init__(self): > super().__init__() > > >>> BrokenClass() > RecursionError: maximum recursion depth exceeded while calling a Python > object > > Maybe some work could be done to allow dataclasses to be smarter about > calling super().__init__() inside of the __post_init__ method (so that > recursion is avoided), I do not know. > > --- > Ricky. > > "I've never met a Kentucky man who wasn't either thinking about going home > or actually going home." - Happy Chandler > > > On Tue, Apr 14, 2020 at 7:37 PM Christopher Barker <python...@gmail.com> > wrote: > >> On Mon, Apr 13, 2020 at 9:22 PM Neil Girdhar <mistersh...@gmail.com> >> wrote: >> >>> Cool, thanks for doing the relevant research. >>> >> >> For my part, I'd like to see an aeefort to move dataclasses forward. Now >> that they are in the standard library, they do need to remain pretty >> stable, but there's still room for extending them. But it's a bit hard when >> ideas and PRs are mingled in with everything else Python. >> >> Maybe a gitHub repo just for dataclasses? >> >> @Eric V. Smith <e...@trueblade.com>: what do you think? IS there a way >> to keep them moving forward? >> >> >>> I'm just going to swap dataclasses for actual classes whenever I need >>> inheritance. It seems like a pity though. >>> >> >> For my part, I've gotten around it (for a different reason...) with an >> extra inheritance dance: >> >> @dataclass >> MyClassBase: >> .... >> >> MyRealClass(MyClassBase, Some_other_baseclass): >> def __init__(self., args, kwargs): >> dc_args, dc_kwargs = some_magic_with_self.__dataclass_fields__ >> MyClassBase.__init__(dc_args, dc_kwargs) >> super().__init__(self, args, kwargs) >> >> and you could put that __init__ in a mixin to re-use it. >> >> Or, frankly, just give your dataclass some extra fields that are needed >> by the superclass you want to use. >> >> -CHB >> >> Best, >>> >>> Neil >>> >>> On Tue, Apr 14, 2020 at 12:07 AM Christopher Barker <python...@gmail.com> >>> wrote: >>> >>>> I feel like it would be nice to be able to use dataclasses more often >>>>> without worrying that you cannot use dataclasses in cooperative >>>>> inheritance. Perhaps, dataclasses could call super with unused args and >>>>> kwargs? >>>>> >>>> >>>> There is a PR on gitHub where a user has requested that dataclasses >>>> (optionally) except any extra kwargs along. I think it saw some support, >>>> but has stalled out. Im pretty sure in that case, the extra kwargs would be >>>> ignored. >>>> >>>> https://github.com/python/cpython/pull/19206 >>>> https://bugs.python.org/issue33493 >>>> >>>> -CHB >>>> >>>> On Sun, Apr 12, 2020 at 12:49 AM Neil Girdhar <mistersh...@gmail.com> >>>> wrote: >>>> >>>>> class X: >>>>> def __init__(self, x, **kwargs): >>>>> super().__init__(**kwargs) >>>>> print(x, kwargs) >>>>> >>>>> >>>>> >>>>> @dataclass >>>>> class Y(X): >>>>> y: int >>>>> >>>>> >>>>> Y(1) # What should happen? >>>>> Y(1, 2) # What should happen? >>>>> >>>>> >>>>> I feel like it would be nice to be able to use dataclasses more often >>>>> without worrying that you cannot use dataclasses in cooperative >>>>> inheritance. Perhaps, dataclasses could call super with unused args and >>>>> kwargs? >>>>> >>>>> Best, >>>>> >>>>> Neil >>>>> _______________________________________________ >>>>> 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/6YMRI4BJDTZZTWM6XQ6EQDZ47RWX4C7C/ >>>>> Code of Conduct: http://python.org/psf/codeofconduct/ >>>>> >>>> >>>> >>>> -- >>>> Christopher Barker, PhD >>>> >>>> Python Language Consulting >>>> - Teaching >>>> - Scientific Software Development >>>> - Desktop GUI and Web Development >>>> - wxPython, numpy, scipy, Cython >>>> -- >>>> Christopher Barker, PhD >>>> >>>> Python Language Consulting >>>> - Teaching >>>> - Scientific Software Development >>>> - Desktop GUI and Web Development >>>> - wxPython, numpy, scipy, Cython >>>> >>> >> >> -- >> Christopher Barker, PhD >> >> Python Language Consulting >> - Teaching >> - Scientific Software Development >> - Desktop GUI and Web Development >> - wxPython, numpy, scipy, Cython >> _______________________________________________ >> 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/WLKKFCNAPYPOVUEHXMJNBNJPAECB7QKR/ >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > -- Christopher Barker, PhD Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython
_______________________________________________ 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/RF776G564FI4GPGYAOXG5DUHY6WVA6WX/ Code of Conduct: http://python.org/psf/codeofconduct/