[Python-Dev] Concerns about method overriding and subclassing with dataclasses
Eric V. Smith
eric at trueblade.com
Fri Jan 5 08:08:36 EST 2018
On 1/2/2018 12:01 AM, Guido van Rossum wrote:
> On Mon, Jan 1, 2018 at 8:50 PM, Ethan Smith <ethan at ethanhs.me
> <mailto:ethan at ethanhs.me>> wrote:
>
>
>
> On Mon, Jan 1, 2018 at 5:03 PM, Chris Barker <chris.barker at noaa.gov
> <mailto:chris.barker at noaa.gov>> wrote:
>
> On Sat, Dec 30, 2017 at 7:27 AM, Stephen J. Turnbull
> <turnbull.stephen.fw at u.tsukuba.ac.jp
> <mailto:turnbull.stephen.fw at u.tsukuba.ac.jp>> wrote:
>
> Just use the simple rule that a new
> __repr__ is generated unless provided in the dataclass.
>
>
> are we only talking about __repr__ here ???
>
> I interpreted Guido's proposal as being about all methods -- we
> _may_ want something special for __repr__, but I hope not.
>
> [...]
>
>
> I interpreted this to be for all methods as well, which makes sense.
> Special casing just __repr__ doesn't make sense to me, but I will
> wait for Guido to clarify.
>
>
> Indeed, I just wrote __repr__ for simplicity. This should apply to all
> special methods. (Though there may be some complications for
> __eq__/__ne__ and for the ordering operators.)
>
> On Mon, Jan 1, 2018 at 9:44 PM, Chris Barker <chris.barker at noaa.gov
> <mailto:chris.barker at noaa.gov>> wrote:
>
> On Mon, Jan 1, 2018 at 7:50 PM, Ethan Smith <ethan at ethanhs.me
> <mailto:ethan at ethanhs.me>> wrote:
>
>
> Will you get the "right" __repr__ now if you derive a
> dataclass from a dataclass? That would be a nice feature.
>
>
> The __repr__ will be generated by the child dataclass unless the
> user overrides it. So I believe this is the "right" __repr__.
>
>
> what I was wondering is if the child will know about all the fields
> in the parent -- so it could make a full __repr__.
>
>
> Yes, there's a class variable (__dataclass_fields__) that identifies the
> parent fields. The PEP doesn't mention this or the fact that special
> methods (like __repr__ and __init__) can tell whether a base class is a
> dataclass. It probably should though. (@Eric)
I think that's covered in this section:
https://www.python.org/dev/peps/pep-0557/#inheritance
Eric.
More information about the Python-Dev
mailing list