Issue 28263: Python 2.7's -3
flag warns about eq being implemented without hash even if hash is never accessed. (original) (raw)
Issue28263
Created on 2016-09-23 23:23 by Roy Williams, last changed 2022-04-11 14:58 by admin. This issue is now closed.
Messages (3) | ||
---|---|---|
msg277305 - (view) | Author: Roy Williams (Roy Williams) * | Date: 2016-09-23 23:23 |
I'm finding the -3 flag to be super useful at identifying problems with code when porting to Python 3. One of the most common failures, however, is "DeprecationWarning: Overriding __eq__ blocks inheritance of __hash__ in 3.x". While implementing __eq__ without implementing __hash__ is very much an anti-pattern, this warning would be much less noisy if it could be thrown at time of access (like the __getslice__ warning) instead of time of declaration. See Also: https://github.com/nedbat/coveragepy/pull/17 http://bugs.python.org/issue28260 | ||
msg277309 - (view) | Author: Antti Haapala (ztane) * | Date: 2016-09-24 07:01 |
I am very negative to this idea. Correct code in Python **2** would either set `__hash__ = None` or redefine `__hash__` in *any* class that defines `__eq__`. That it just wasn't used like that is no excuse. This warning is even more important if even Ned Batchelder could have a bug like that in his code. It will break as soon as someone "realizes" that "hey I can use a set to remove duplicates in my container". | ||
msg277317 - (view) | Author: Christian Heimes (christian.heimes) * ![]() |
Date: 2016-09-24 12:58 |
Antti is correct. Please add __hash__ = None to your class to silence the warning. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:58:37 | admin | set | github: 72450 |
2016-09-24 12:58:40 | christian.heimes | set | status: open -> closednosy: + christian.heimesmessages: + resolution: not a bugstage: resolved |
2016-09-24 11:16:31 | nedbat | set | nosy: + nedbat |
2016-09-24 07:01:09 | ztane | set | nosy: + ztanemessages: + |
2016-09-23 23:23:01 | Roy Williams | create |