[Python-ideas] caching properties

Jared Grubb jared.grubb at gmail.com
Thu Apr 30 22:59:55 CEST 2009


On 30 Apr 2009, at 12:22, Scott David Daniels wrote:
>
> This is slightly better (name change as in Antoine Pitrou's comment):
>
>    class cached(object):
>
>        def __init__(self, function):
>            self._function = function
>            self._cache = {}
>
>        def __call__(self, *args):
>            try:
>                return self._cache[args]
>            except KeyError:
>                self._cache[args] = self._function(*args)
>                return self._cache[args]
>
>        def expire(self, *args):
>            del self._cache[args]
>

The only thing I dislike is how many dictionary lookups are required  
in order to return the value after it's been cached. I count 4 lookups  
(object.prop, prop.__call__, self._cache, and self._cache[args]).  
These add up, especially if object.prop could have returned the value  
immediately without having to go through so much indirection (but this  
is not currently possible)

Jared



More information about the Python-ideas mailing list