ANN: decorator 2.3
Michele Simionato
michele.simionato at gmail.com
Tue Aug 5 01:19:31 EDT 2008
The decorator module is a library written with the purpose of
simplifying your life with decorators. It is now more than three years
old and it is used in many Python frameworks (more than
I know of). Release 2.3 adds support for writing decorator factories
with a minimal effort (the feature was requested by Matthew Wilson).
Every class with a .call method with signature
call(self, func, *args, **kw) can be converted into
a decorator factory. Here is a simple example of usage:
from decorator import decorator
class Logging(object):
"A decorator factory adding logging support to functions"
def __init__(self, fname):
self.logfile = file(fname, 'a')
def call(self, f, *a, **k):
self.logfile.write('Calling %s with args %s, %s\n' %
(f.__name__, a, k))
return f(*a, **k)
Logging = decorator(Logging) # add a suitable __call__ method to the
class
@Logging('x.log')
def example():
pass
example() # "Calling example with args (), {}" will be logged on x.log
If you are already using Python 2.6 you can use the class decorator
syntax, of course.
The main advantage of the library is that decorators implemented
using it are signature-preserving, which is not the case for naive
decorators. The full documentation is here:
http://www.phyast.pitt.edu/~micheles/python/documentation.html
You can download the archive
http://www.phyast.pitt.edu/~micheles/python/decorator-2.3.1.zip
or just run
easy_install decorator
Have fun!
Michele Simionato
More information about the Python-list
mailing list