Skip to content

Instantly share code, notes, and snippets.

@rob-b
Created July 18, 2013 10:27
Show Gist options
  • Save rob-b/6028309 to your computer and use it in GitHub Desktop.
Save rob-b/6028309 to your computer and use it in GitHub Desktop.
from functools import update_wrapper
def cached_property(f, name=None):
if not name:
name = f.__name__
prop = '_%s' % name
def _get_property(self):
try:
value = getattr(self, prop)
except AttributeError:
value = f(self)
setattr(self, prop, value)
return value
update_wrapper(_get_property, f)
def _del_property(self):
delattr(self, prop)
return property(_get_property, None, _del_property)
@rob-b
Copy link
Author

rob-b commented Jul 18, 2013

Use thusly:

class F(object):

    @cached_property
    def disinflate(self):
        return some_expensive_method()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment