[Python-3000] weakrefs of bound methods

Phillip J. Eby pje at telecommunity.com
Fri Feb 15 21:52:43 CET 2008


At 11:41 AM 2/15/2008 -0800, Guido van Rossum wrote:
>On Fri, Feb 15, 2008 at 10:26 AM, Phillip J. Eby 
><pje at telecommunity.com> wrote:
> >  I've never actually encountered a usecase for keeping a standard
> >  weakref to a standard bound method, though.  It's pretty useless,
> >  because bound methods are nearly always immediately disposed of, and
> >  there's no logical place (or reason) to store them.  So, Nick's query
> >  is (in effect), can we either:
> >
> >  1. make ref(method) create a "weak method" instead, or
> >
> >  2. make ref(method) an error instead of useless behavior that gives
> >  you the illusion of working code
>
>#2 is easily implemented (just remove the machinery to support weak
>refs from the bound method object) but the question is, will it break
>anybody's code -- and if so, do we care enough to break it? (In Py3k,
>that is.)

It's hard to imagine what could be using it, but I guess it's possible.


>#1 isn't so easy in terms of how you'd implement it -- I don't think
>the weakref.ref() call currently has a way to customize what kind of
>thing you get back. I'd be open for a patch containing working code
>that can be generalized to other cases.

Well, one could allow for a __weaken__ method that would be called if 
present, instead of the default constructor.  The part I'm not 
immediately sure of is where to call it *from*, so that you can still 
subclass weakref.ref and not end up in a strange delegation loop.  I 
guess you could call it if and only if weakref.ref.__new__ was passed 
weakref.ref as the class to construct.



More information about the Python-3000 mailing list