[Python-Dev] PEP 557: Data Classes (original) (raw)
Barry Warsaw barry at python.org
Mon Sep 11 18:00:05 EDT 2017
- Previous message (by thread): [Python-Dev] PEP 557: Data Classes
- Next message (by thread): [Python-Dev] PEP 557: Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sep 10, 2017, at 20:08, Nathaniel Smith <njs at pobox.com> wrote:
I've sometimes wished that attrs let me control whether it generated equality methods (eq/ne/hash) separately from ordering methods (lt/gt/...). Maybe the cmp= argument should take an enum with options none/equality-only/full?
I have had use cases where I needed equality comparisons but not ordered comparisons, so I’m in favor of the option to split them. (atm, I can’t bring up a specific case, but it’s not uncommon.)
Given that you only want to support the three states that Nathaniel describes, I think an enum makes the most sense, and it certainly would read well. I.e. there’s no sense in supporting the ordered comparisons and not equality, so that’s not a state that needs to be represented.
I’d make one other suggestion here: please let’s not call the keyword cmp
. That’s reminiscent of Python 2’s cmp
built-in, which of course doesn’t exist in Python 3. Using cmp
is just an unnecessarily obfuscating abbreviation. I’d suggest just compare
with an enum like so:
enum Compare(enum.Enum): none = 1 unordered = 2 ordered = 3
One thing I can’t avoid is DRY:
from dataclasses import Compare, dataclass
@dataclass(compare=Compare.unordered) class Foo: # …
Maybe exposing the enum items in the module namespace?
——dataclasses/init.py----- from enum import Enum
class Compare(Enum): none = 1 unordered = 2 ordered =3
none = Compare.none unordered = Compare.unordered ordered = Compare.ordered ——dataclasses/init.py-----
from dataclasses import dataclass, unordered
@dataclass(compare=unordered) class Foo: # …
Cheers, -Barry
-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 273 bytes Desc: Message signed with OpenPGP URL: <http://mail.python.org/pipermail/python-dev/attachments/20170911/8ace74f5/attachment.sig>
- Previous message (by thread): [Python-Dev] PEP 557: Data Classes
- Next message (by thread): [Python-Dev] PEP 557: Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]