Как работает этот Python decorator?

Я смотрел на некоторые ленивые загрузчики декораторов свойств в Python и случайно наткнулсяhttp://code.activestate.com/recipes/363602-lazy-property-evaluation/):

class Lazy(object):
    def __init__(self, calculate_function):
        self._calculate = calculate_function

    def __get__(self, obj, _=None):
        if obj is None:
            return self
        value = self._calculate(obj)
        setattr(obj, self._calculate.func_name, value)
        return value

# Sample use:

class SomeClass(object):

    @Lazy
    def someprop(self):
        print 'Actually calculating value'
        return 13

o = SomeClass()
o.someprop
o.someprop

У меня вопрос, как это работает? Мое понимание декораторов состоит в том, что они должны вызываться (так что либо функция, либо вызов__call__), ноLazy тут явно нет и если я попробуюLazy(someFunc)() это вызывает исключение, как и ожидалось. Что мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос