[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