Hacker News new | ask | show | jobs
by peregrine 5385 days ago
That would be nice! I poked around djangos source to see how they created decorators that take parameters but never thought how that worked was very intuitive.
1 comments

It's easy:

  def mydec(func, decor_param_a, decor_param_b):
      print 'decor_param_a = %s' % decor_param_a
      def wrapper(*args, **kwargs):
          print 'about to run function'
          res = func(*args, **kwargs)
          print 'done running function'
          return res

      return wrapper
Now just do:

  @mydecor('foo', 'bar')
  def baz():
      pass
It is a bit more work if you want to create a decorator that can:

* decorate a class

* decorate a method

* have arguments

* have no arguments

extremely contrived example:

http://pastebin.com/GBuYL2af

Note that the above only works for 'new style' classes (otherwise the type signature is not 'type').

edit: dumped code in a pastebin. it got kind of long.