[Python-ideas] weakref.WeakKeyDictionary is (basically) useless

Benjamin Peterson benjamin at python.org
Wed Dec 31 02:03:18 CET 2014

Kevin Norris <nykevin.norris at ...> 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

More information about the Python-ideas mailing list