instance references?

Alex Martelli aleax at mail.comcast.net
Tue Jan 31 03:58:11 CET 2006


Scott David Daniels <scott.daniels at acm.org> wrote:

> Alex Martelli wrote:
> > My favourite way to use weakref is slightly different: I would have
> >    aptbase.drawables = weakref.WeakValueDictionary
> typo here:
>       aptbase.drawables = weakref.WeakValueDictionary()
> > then in each __init__
> >    aptbase.drawables[len(aptbase.drawables)] = self
> > then in show:
> >    for o in aptbase.drawables.values():
> >        # render it
> The keys you are choosing are probably not a good idea.
> Problem demo:
> 
>     a,b,c = Something(), Something(), Something()
>     b = None
>     d = Something()  # overwrites the d entry.
> 
> I'd use:
>      aptbase.drawables[id(self)] = self

Good point -- the id isn't going to be reused until self is gone, of
course.  I normally use a monotonically increasing counter (global or in
self's class), but there's no real reason for that -- id is simpler (and
using len as I had is definitely bugprone, as you mention).


Alex



More information about the Python-list mailing list