For simple situations you can call super in the __post_init__ method and
things will work fine:
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 <[email protected]>
wrote:
> On Mon, Apr 13, 2020 at 9:22 PM Neil Girdhar <[email protected]>
> 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 <[email protected]>: 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 <[email protected]>
>> 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 <[email protected]>
>>> 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 -- [email protected]
>>>> To unsubscribe send an email to [email protected]
>>>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>>>> Message archived at
>>>> https://mail.python.org/archives/list/[email protected]/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 -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/[email protected]/message/WLKKFCNAPYPOVUEHXMJNBNJPAECB7QKR/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/RKQRYH6X75LVTSLD3ZFFGHGIW2BUAMHI/
Code of Conduct: http://python.org/psf/codeofconduct/