human
I am working on the file "BlogPosts/Decorator_mixing/decorator_mixing.ipynb".
The first task is:
We're onto something! In AbstractPouncer.pounce, which didn't have a @cachedproperty annotation, we see __isabstractmethod__ is set, as expected. So what's happening in ProcessTimeProvider.process_time? It must be related to @cachedproperty. Let's look at the implementation again.
Looking closer at @cachedproperty
Can you write Python code for it?
 ... Here's happening in ProcessTimeProvider?
assistant
#Here's happening in ProcessTimeProvider.

class cachedproperty:

    def __init__(self, func):
        self.__doc__ = getattr(func, '__doc__')
        self.func = func

    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        value = obj.__dict__[self.func.__name__] = self.func(obj)
        return value

    def __repr__(self):
        cn = self.__class__.__name__
        return '<%s func=%s>' % (cn, self.func)