[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Python-Dev] Is static typing still optional?

On 1/29/2018 1:55 AM, Yury Selivanov wrote:
> On Mon, Jan 29, 2018 at 1:36 AM Nick Coghlan <ncoghlan at gmail.com 
> <mailto:ncoghlan at gmail.com>> wrote:
>     [...]
>     Currently the answers are:
>     - A: not hashable
>     - B: hashable (by identity) # Wat?
>     - C: hashable (by field hash)
>     - D: hashable (by identity) # Wat?
>     - E: hashable (by field hash)
>     - F: hashable (by field hash)
>     - G: hashable (by field hash)
>     - H: hashable (by field hash)
> This is very convoluted.
> +1 to make hashability an explicit opt-in.

I agree it's complicated.

I think it would be a bad design to have to opt-in to hashability if 
using frozen=True. The point of hash=None (the default) is to try and 
get the simple cases right with the simplest possible interface.

It's the intersection of "have simple defaults, but ways to override 
them" with "if the user provides some dunder methods, don't make them 
specify feature=False in order to use them" that complicated things. For 
example, maybe we no longer need eq=False now that specifying a __eq__ 
turns off dataclasses's __eq__ generation. Does dataclasses really need 
a way of using object identity for equality?