Identical descriptor value, without leaking memory?

Jack Bates ms419 at freezone.co.uk
Mon Jul 25 13:46:10 EDT 2011


How can you get a descriptor to return an identical value, each time
it's called with the same "instance" - without leaking memory?


#!/usr/bin/env python

class descriptor:
  class __metaclass__(type):
    def __get__(self, instance, owner):
      ...

class owner:
  descriptor = descriptor

instance = owner()


I want ">>> instance.descriptor is instance.descriptor" to evaluate True

I was thinking of "caching" descriptor return values? Like a dictionary
of instances and descriptor return values? I was thinking of using
weakref.WeakKeyDictionary to avoid leaking memory? But I can't guarantee
that the descriptor return value won't indirectly reference the
instance, in which case weakref.WeakKeyDictionary *does* leak memory?

Does anyone know how to get a descriptor to return an identical value,
each time it's called with the same "instance" - without leaking memory?

Much thanks!



More information about the Python-list mailing list