[Python-Dev] weakref enhancements (original) (raw)

Raymond Hettinger rhettinger at ewtllc.com
Fri Sep 29 01:08:56 CEST 2006


[Alex Martelli]

I've had use cases for "weakrefs to boundmethods" (and there IS a Cookbook recipe for them), Weakmethods make some sense (though they raise the question of why bound methods are being kept when the underlying object is no longer in use -- possibly as unintended side-effect of aggressive optimization).

I'm more concerned about weakattr which hides the weak referencing from client code when it is usually the client that needs to know about the refcounts:

n = SomeClass(x) obj.a = n del n # hmm, what happens now?

If obj.a is a weakattr, then n get vaporized; otherwise, it lives.

It is clearer and less error-prone to keep the responsibility with the caller:

n = SomeClass(x) obj.a = weakref.proxy(n) del n # now, it is clear what happens

The wiki-space example shows objects that directly assign a copy of self to an attribute of self. Even in that simplified, self-referential example, it is clear that correct functioning (when del gets called) depends knowing whether or not assignments are creating references.
Accordingly, the code would be better-off if the weak-referencing assignment was made explicit rather than hiding the weak-referencing wrapper in a descriptor.

Raymond



More information about the Python-Dev mailing list