
Kevin Norris <nykevin.norris@...> writes:
Why is it broken? To go back to our simple example, imagine someone subclasses Bar (let's call the subclass Baz) and implements __eq__() and/or __hash__(). Instances of Baz may not work at all (if __hash__ is None) or they may "work" but behave nonsensically (all values-equal instances of Baz will have the same .foo attribute - imagine trying to track that bug down!). While we could forbid such a subclass in our API docs, this runs afoul of the open/closed principle.
Why not just use a wrapper like this for keys? class IdentityWrapper(object): def __init__(self, obj): self.obj = obj def __hash__(self): return id(self.obj) def __eq__(self, other): return self.obj is other