Scott David Daniels <[EMAIL PROTECTED]> wrote: > Daishi Harada wrote: > > ... I've managed to get these working for both > > functions and methods by wrapping them in > > yet another function (the following is for the > > cookbook example, replacing 'cachedmethod'): > > > > --- > > def memoize(function): > > im = Memoize(function) > > def fn(*args, **kwargs): > > return im(*args, **kwargs) > > return fn > > --- > But, this is equivalent to: > def memoize(function): > im = Memoize(function) > return im
It's only equivalent if Memoize returns a function, or another descriptor whose __get__ behaves like a function's. In other words, if Memoize is a class with a __call__ method, you need to add to it a __get__ method able to bind the `self' argument (and if you want complete emulation of Memoize being a function, its __get__ method must also be able to produce the type-checking equivalent of the unbound method objects that a function's __get__ would build). Only when such a __get__ method is in class Memoize does this simplification work, and similarly for the further ones you show: > Which is (in turn) equivalent to: > memoize = Memoize > > So you can just use > @Memoize > def function (.... Alex -- http://mail.python.org/mailman/listinfo/python-list