On 02/06/2018 06:48 PM, Guido van Rossum wrote:

That seems a rare case (though I hadn't thought of it). I had thought of the 
use case where you want a frozen type
without a hash; that you can presumably implement using

def __hash__(self): raise TypeError("not hashable")

We can do a similar thing to preserve the superclass __hash__ if it's rare 
enough:

def __hash__(self): return super().__hash__()

If at all possible I'd like to kill the tri-state hash= flag -- the amount of 
time spent creating and discussing the
huge table in the bpo issue are an indication of how much effort it would take 
other people to understand it.

I think the biggest reason this has become so complicated is because we are 
refusing to use an Enum:

class Hashable(Enum):
    IF_SAFE = 1
    ADD = 2
    DEFER = 3
    NONE = 4

IF_SAFE is currently the False value.
ADD is currently the True value
DEFER means don't add one
NONE means set __hash__ to None

The only thing missing now is a setting to indicate that dataclass should do nothing if the class already has a __hash__ method -- possibly DEFER, although I think IF_SAFE can include "the class already has one, it's not safe to override it".

If either of those use cases becomes annoyingly common we'll have to think of 
something else.

Or we could solve it now and not have to deal with backwards-compatibility 
issues in the future.

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to