Kevin Smith wrote:
I have many cases in my code where I use a property for calculating a value on-demand. Quite a few of these only need to be called once. After that the value is always the same. In these properties, I set a variable in the instance as a cached value and return that value on subsequent calls. It would be nice if there was a descriptor that would do this automatically. Actually, what would be really nice is if I could replace the property altogether and put the calculated value in its place after the first call, but the property itself prevents me from doing that. Is this possible?

If you use the old-fashioned __getattr__ method instead of properties. __getattr__ gets called only if the value can't be found in the instance dictionary.


def __getattr__ (self, attrname):
    try:
        method = getattr (self, 'calculate_' + attrname)
    except AttributeError:
        raise AttributeError, attrname
    value = method ()
    setattr (self, attrname, value)
    return value

And probably also through metaclasses. And decorators.

Daniel
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to