Nuke timed_cached_property until I'm happy with an implementation
[cached-property.git] / cached_property.py
1 # -*- coding: utf-8 -*-
2
3 __author__ = 'Daniel Greenfeld'
4 __email__ = 'pydanny@gmail.com'
5 __version__ = '0.1.4'
6 __license__ = 'BSD'
7
8 import time
9
10
11 class cached_property(object):
12 """ A property that is only computed once per instance and then replaces
13 itself with an ordinary attribute. Deleting the attribute resets the
14 property.
15
16 Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76
17 """
18
19 def __init__(self, func):
20 self.__doc__ = getattr(func, '__doc__')
21 self.func = func
22
23 def __get__(self, obj, cls):
24 if obj is None:
25 return self
26 value = obj.__dict__[self.func.__name__] = self.func(obj)
27 return value