eq-without-hash (PLW1641)#
Derived from the Pylint linter.
This rule is unstable and in preview. The --preview
flag is required for use.
What it does#
Checks for classes that implement __eq__
but not __hash__
.
Why is this bad?#
A class that implements __eq__
but not __hash__
will have its hash
method implicitly set to None
. This will cause the class to be
unhashable, will in turn cause issues when using the class as a key in a
dictionary or a member of a set.
Known problems#
Does not check for __hash__
implementations in superclasses.
Example#
class Person:
def __init__(self):
self.name = "monty"
def __eq__(self, other):
return isinstance(other, Person) and other.name == self.name
Use instead: