How to create a (transparent) decorator with status information?

Timo Schmiade the_isz at gmx.de
Tue Apr 19 03:03:59 EDT 2011


Hey Ian,

On Mon, Apr 18, 2011 at 01:07:58PM -0600, Ian Kelly wrote:
> In the simple case, just store the state on the wrapper function itself:
> 
> def call_counts(function):
>   @functools.wraps(function)
>   def wrapper(*args, **kwargs):
>     wrapper.num_calls += 1
>     return function(*args, **kwargs)
>   wrapper.num_calls = 0
>   return wrapper

Of course! Functions are first-class objects, so I can give them members
just as I would do with any other object. I'm still thinking too much
C++...

> If you want the state to be shared, you should probably store it in an
> object and use an instance method as the decorator:

Yes, this is the same idea that Wayne came up with. Thank you as well,
that helped me understand decorators a lot more.

Kind regards,

Timo



More information about the Python-list mailing list