[Python-Dev] Second post: PEP 557, Data Classes

Carl Meyer carl at oddbird.net
Sun Nov 26 00:23:38 EST 2017


Hi Eric,

Really excited about this PEP, thanks for working on it. A couple minor
questions:

> If compare is True, then eq is ignored, and __eq__ and __ne__ will be
automatically generated.

IMO it's generally preferable to make nonsensical parameter combinations
an immediate error, rather than silently ignore one of them. Is there a
strong reason for letting nonsense pass silently here?

(I reviewed the previous thread; there was a lot of discussion about
enums/flags vs two boolean params, but I didn't see explicit discussion
of this issue; the only passing references I noticed said the invalid
combo should be "disallowed", e.g. Guido in [1], which to me implies "an
error.")

> isdataclass(instance): Returns True if instance is an instance of a
Data Class, otherwise returns False.

Something smells wrong with the naming here. If I have

    @dataclass
    class Person:
        name: str

I think it would be considered obvious and undeniable (in English prose,
anyway) that Person is a dataclass. So it seems wrong to have
`isdataclass(Person)` return `False`. Is there a reason not to let it
handle either a class or an instance (looks like it would actually
simplify the implementation)?

Carl


 [1] https://mail.python.org/pipermail/python-dev/2017-September/149505.html

On 11/25/2017 01:06 PM, Eric V. Smith wrote:
> The updated version should show up at
> https://www.python.org/dev/peps/pep-0557/ shortly.
> 
> The major changes from the previous version are:
> 
> - Add InitVar to specify initialize-only fields.
> - Renamed __dataclass_post_init__() to __post_init().
> - Rename cmp to compare.
> - Added eq, separate from compare, so you can test
>   unorderable items for equality.
> - Flushed out asdict() and astuple().
> - Changed replace() to just call __init__(), and dropped
>   the complex post-create logic.
> 
> The only open issues I know of are:
> - Should object comparison require an exact match on the type?
>   https://github.com/ericvsmith/dataclasses/issues/51
> - Should the replace() function be renamed to something else?
>   https://github.com/ericvsmith/dataclasses/issues/77
> 
> Most of the items that were previously discussed on python-dev were
> discussed in detail at https://github.com/ericvsmith/dataclasses. Before
> rehashing an old discussion, please check there first.
> 
> Also at https://github.com/ericvsmith/dataclasses is an implementation,
> with tests, that should work with 3.6 and 3.7. The only action item for
> the code is to clean up the implementation of InitVar, but that's
> waiting for PEP 560. Oh, and if PEP 563 is accepted I'll also need to do
> some work.
> 
> Feedback is welcomed!
> 
> Eric.
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> https://mail.python.org/mailman/options/python-dev/carl%40oddbird.net

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-dev/attachments/20171125/736fe188/attachment.sig>


More information about the Python-Dev mailing list