[Tutor] decorators (the "at" sign)?

Siren Saren siren99 at yahoo.com
Wed Oct 27 13:33:42 CEST 2010


Many people have trouble wrapping their minds around decorators.  I couldn't find a decent explanation either until reading an allegedly 'advanced' python book (b/c 'advanced' is in the title, I guess).

An easy explanation might be sufficient, if you don't intend to use them yourself.  A decorator is a way of changing a function's behavior.  Most of the time you see a decorator, the person using it could have merely rewritten the function or method itself and given it some additional capability or modified it in some way.  But, as you may have noticed, programmers prefer to 'abstract' when they can, so they can avoid 'duplicating code.'  (These are buzzwords you'll encounter a lot).

Let's say your program needs to set an index in a lot of different functions, and let's further imagine that setting an index is either more than a line of code or that the index itself may change over the development cycle, or that the index will vary according to some simple pattern consistently defined in these other functions.

To avoid writing the same code over and over and having the value of index set in many different places, the developers chose instead to write the code once and refer to it in all the other functions through a decorator, which takes all the functions, modifies them so they get the index values they need, and sets them back in their places (more or less).

If you want the more complicated answer, I think I can take a reasonable shot at showing how this works too and making an example.  But you may just want a general description.  Also, I'm only about 4 months into learning to program so you may prefer a more expert opinion.  



--- On Tue, 10/26/10, Alex Hall <mehgcap at gmail.com> wrote:

From: Alex Hall <mehgcap at gmail.com>
Subject: [Tutor] decorators (the "at" sign)?
To: "tutor" <tutor at python.org>
Date: Tuesday, October 26, 2010, 2:46 AM

Hi all,
Now that I am able to run the source code of an open source
application I hope to one day help develop, I am trying to understand
how it works. One thing I keep seeing is an at sign followed by a
word, usually (maybe always) immediately preceeding a function
definition. For example, and I know this exact code will not make much
sense, but it gives the idea:
class Bing(Messages, Updating, Dismissable):

 def get_url(self, index=None):
  return self.storage[index]['Url']

What is the "@set_index" for? Specifically, what is the at sign doing?
Google was only able to provide me with a very vague idea of what is
going on, though it seems to crop up a lot in classmethod and
staticmethod calls (not sure about those either). I read PEP 318, but
it was not much help since I am coming at this having no idea what I
am looking at. The PEP did explain why I have never run into this
before, though - it is apparently specific to Python. I see this sort
of thing all over this source code so it seems like a good idea to get
exactly what it is for. TIA!

Have a great day,
Alex (msg sent from GMail website)
mehgcap at gmail.com; http://www.facebook.com/mehgcap
Tutor maillist  -  Tutor at python.org
To unsubscribe or change subscription options:

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20101027/900e4134/attachment.html>

More information about the Tutor mailing list