modifying method behaviour

Hannu Kankaanpää hanzspam at yahoo.com.au
Wed Aug 27 12:22:19 EDT 2003


Nicodemus <nicodemus at globalite.com.br> wrote in message news:<mailman.1061945272.22252.python-list at python.org>...
> Craig Zoretich wrote:
> Use the new descriptor protocol:
> 
> class logmethod(object):
> 
>     def __init__(self, func):
>         self.func = func
> 
>     def __get__(self, obj, class_):
>         def logger(s, *args, **kwargs):
>             result = self.func(s, *args, **kwargs)
>             params = [repr(x) for x in args]
>             params += ['%s=%r' % (name, value) for name, value in 
> kwargs.items()]
>             print 'LOG: %s(%s)' % (self.func.__name__, ', '.join(params))
>             return result
>         return logger.__get__(obj)

Actually, since we're accessing functions, not variables,
descriptors aren't useful. This would do also:

def logmethod(func):
    def logger(s, *args, **kwargs):
        result = func(s, *args, **kwargs)
        params = [repr(x) for x in args]
        params += ['%s=%r' % (name, value) for name, value in kwargs.items()]
        print 'LOG: %s(%s)' % (func.__name__, ', '.join(params))
        return result
    return logger




More information about the Python-list mailing list