The β__hash__β method can be removed
If a class implements both β__eq__β and β__hash__β, it's important for those implementations to be consistent with each other:
TIL that Python will try to help you adhere to this constraint in the presence of subclasses. If you define a subclass, and implement β__eq__β _but not_ β__hash__β, then Python will implicitly set β__hash__β to βNoneβ in that class. That way you can't accidentally override the meaning of βequalsβ in a way that breaks hashability.
βobject.__hash__β documentation
This has some ramifications with the type system: