One-Shot Property?

Dave Benjamin ramen at lackingtalent.com
Tue Jan 18 12:53:43 EST 2005


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?

I was going to recommend taking a look at the "memoize" example on the 
Python wiki, but it seems to be missing at the moment. In any case, 
here's the URL:

http://www.python.org/moin/PythonDecoratorLibrary

There are also a few examples on the Cookbook, like this one:

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/325205

It shouldn't be too difficult to adapt this technique so that it can be 
used to create properties. I wouldn't bother replacing the property with 
an attribute unless you have a specific reason to do so (performance, 
perhaps).

HTH,
Dave



More information about the Python-list mailing list