[Python-Dev] Weak references: dereference notification
Guido van Rossum
guido at python.org
Wed Nov 9 18:23:34 CET 2005
> > Gustavo J. A. M. Carneiro wrote:
> > > I have come across a situation where I find the current weak
> > > references interface for extension types insufficient.
> > >
> > > Currently you only have a tp_weaklistoffset slot, pointing to a
> > > PyObject with weak references. However, in my case[1] I _really_ need
> > > to be notified when a weak reference is dereferenced.
I find reading through the bug discussion a bit difficult to
understand your use case. Could you explain it here? If you can't
explain it you certainly won't get your problem solved! :-)
> > > What happens now
> > > is that, when you call a weakref object, a simple Py_INCREF is done on
> > > the referenced object. It would be easy to implement a new slot to
> > > contain a function that should be called when a weak reference is
> > > dereferenced. Or, alternatively, a slot or class attribute that
> > > indicates an alternative type that should be used to create weak
> > > references: instead of the builtin weakref object, a subtype of it, so
> > > you can override tp_call.
> > >
> > > Does this sounds acceptable?
[Jim Fulton]
> > Since you can now (as of 2.4) subclass the weakref.ref class, you should be able to
> > do this yourself in Python. See for example, weakref.KeyedRef.
>
> I know I can subclass it, but it doesn't change anything. If people
> keep writing code like weakref.ref(myobj) instead of myweakref(myobj),
> it still won't work.
>
> I wouldn't want to have to teach users of the library that they need
> to use an alternative type; that seldom doesn't work.
>
> Now, if there was a place in the type that contained information like
>
> "for creating weak references of instances of this type, use this
> weakref class"
>
> and weakref.ref was smart enough to lookup this type and use it, only
> _then_ it could work.
Looks what you're looking for is a customizable factory fuction.
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list