[Python-Dev] Second post: PEP 557, Data Classes (original) (raw)
Carl Meyer carl at oddbird.net
Sun Nov 26 00:23:38 EST 2017
- Previous message (by thread): [Python-Dev] Second post: PEP 557, Data Classes
- Next message (by thread): [Python-Dev] Second post: PEP 557, Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 dataclasspostinit() to postinit(). - 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>
- Previous message (by thread): [Python-Dev] Second post: PEP 557, Data Classes
- Next message (by thread): [Python-Dev] Second post: PEP 557, Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]