On Mon, Jul 25, 2011 at 11:46 AM, Jack Bates <ms...@freezone.co.uk> wrote: > How can you get a descriptor to return an identical value, each time > it's called with the same "instance" - without leaking memory?
class MyDescriptor(object): def __get__(self, instance, owner): try: return instance.__cached_value[self] except AttributeError: instance.__cached_value = {self: get_value(instance, owner)} except KeyError: instance.__cached_value[self] = get_value(instance, owner) return instance.__cached_value class MyClass(object): my_attribute = MyDescriptor() Placing the cache on the object instance ensures that it won't outlive the object, and since the full attribute name will be _MyDescriptor__cached_value, it's highly unlikely to conflict with an existing attribute. Keying the value on self is necessary in case the object has multiple descriptors of the same type. -- http://mail.python.org/mailman/listinfo/python-list