New submission from Eric V. Smith <>:

See for 
a discussion.

This will remove the @dataclass hash= tri-state parameter, and replace it with 
an unsafe_hash= boolean-only parameter.

>From that thread:

I propose that with @dataclass(unsafe_hash=False) (the default), a __hash__
method is added when the following conditions are true:

- frozen=True (not the default)
- compare=True (the default)
- no __hash__ method is defined in the class

If we instead use @dataclass(unsafe_hash=True), a __hash__ will be added
regardless of the other flags, but if a __hash__ method is present, an
exception is raised.

Other values (e.g. unsafe_hash=None) are illegal for this flag.

assignee: eric.smith
components: Library (Lib)
messages: 312686
nosy: eric.smith, ned.deily
priority: release blocker
severity: normal
status: open
title: Change dataclasses hashing to use unsafe_hash boolean (default to False)
type: behavior
versions: Python 3.7

Python tracker <>
Python-bugs-list mailing list

Reply via email to