[Python-Dev] Weakref design questions (original) (raw)

Brian Quinlan brian@sweetapp.com
Fri, 18 Oct 2002 21:44:39 -0700


Martin wrote:

So you merely want a proxy, not a weak proxy: both for the entire object, and for the methods. So for this code, you can save the proxy, and return your callable object. Make the null pointer check in its tpcall slot, and don't kill it after py func call, but merely clear the pointer.

As you say, I need a proxy for my methods and a proxy for my objects.

Creating my own proxy type for methods is easy, since the only interesting thing that must be proxied is call.

Creating my own proxy type for arbitrary objects is harder because I must create a proxy for every slot that I use. That requires duplication a lot of the work that already lives in weakrefobject.c

Also, for both method and object proxies, I have to invent a mechanism to signal that the original object is dead. weakrefobject.c already defines a nice mechanism.

I also notice that you rely on the fact that Python code has no way to find out the underlying object of a weak proxy. I think this is a weak assumption - there is no guarantee that this is not possible, or might not be possible in the future.

This is a concern. If I am mistaken in my assumption, please let me know and I will either invent my own proxy type or use the check-on-every-method-call technique.

Cheers, Brian