The primary objection to this form is that it requires "peeking inside" the method body to determine the decorators. In addition, even though the code is inside the method body, it is not executed when the method is run. Guido felt that docstrings were not a good counter-example, and that it was quite possible that a 'docstring' decorator could help move the docstring to outside the function body.

Pastel is a painting medium in the form of a stick, consisting of pure powdered pigment and a binder.[19] The pigments used in pastels are the same as those used to produce all colored art media, including oil paints; the binder is of a neutral hue and low saturation. The color effect of pastels is closer to the natural dry pigments than that of any other process.[20] Because the surface of a pastel painting is fragile and easily smudged, its preservation requires protective measures such as framing under glass; it may also be sprayed with a fixative. Nonetheless, when made with permanent pigments and properly cared for, a pastel painting may endure unchanged for centuries. Pastels are not susceptible, as are paintings made with a fluid medium, to the cracking and discoloration that result from changes in the color, opacity, or dimensions of the medium as it dries.


Did you get it? We just applied the previously learned principles. This is exactly what the decorators do in Python! They wrap a function and modify its behaviour in one way or the another. Now you might be wondering that we did not use the @ anywhere in our code? That is just a short way of making up a decorated function. Here is how we could have run the previous code sample using @.

In object-oriented programming, the decorator pattern is a design pattern that allows behavior to be added to an individual object, dynamically, without affecting the behavior of other objects from the same class.[1] The decorator pattern is often useful for adhering to the Single Responsibility Principle, as it allows functionality to be divided between classes with unique areas of concern.[2] The decorator pattern is structurally nearly identical to the chain of responsibility pattern, the difference being that in a chain of responsibility, exactly one of the classes handles the request, while for the decorator, all classes handle the request.
Note that greet_bob(say_hello) refers to two functions, but in different ways: greet_bob() and say_hello. The say_hello function is named without parentheses. This means that only a reference to the function is passed. The function is not executed. The greet_bob() function, on the other hand, is written with parentheses, so it will be called as usual.

This decorator works by storing the time just before the function starts running (at the line marked # 1) and just after the function finishes (at # 2). The time the function takes is then the difference between the two (at # 3). We use the time.perf_counter() function, which does a good job of measuring time intervals. Here are some examples of timings:


Peter Heller is the best-selling author of The Dog Stars. He holds an MFA from the Iowa Writers’ Workshop in both fiction and poetry. An award-winning adventure writer and a longtime contributor to NPR, Heller is a contributing editor at Outside magazine, Men’s Journal, and National Geographic Adventure, and a regular contributor to Bloomberg Businessweek. He is also the author of several nonfiction books, including Kook, The Whale Warriors, and Hell or High Water: Surviving Tibet’s Tsangpo River. He lives in Denver, Colorado.

Modifying classes in this fashion is also possible, though the benefits are not as immediately apparent. Almost certainly, anything which could be done with class decorators could be done using metaclasses, but using metaclasses is sufficiently obscure that there is some attraction to having an easier way to make simple modifications to classes. For Python 2.4, only function/method decorators are being added.


As Painter & Decorator you will ensure our 5* hotel is looking as pristine as possible through ensuring respective tasks are completed to the highest of quality with attention to detail as well as being confident to be guest facing throughout the hotel. Working within the Engineering Department you will be carrying out daily ad-hoc painting and decorating projects adhering to all health and safety precautions. Other duties will including sanding, wallpapering and other preventative maintenance tasks as required. At Sofitel London St James, we offer an array of great benefits including the following: Up to 4 free nights per year in AccorHotels in the UK and Ireland plus fixed-rate/discounted hotel stays and dining worldwide. 28 days holiday per year rising to 33 days linked to service (inclusive of Bank Holidays) plus a day off for moving house. Career development and progression including the AccorHotels mobility programme. Recognition initiatives and rewards for our Ambassadors who strive every day to offer our guests the best possible experience. Loyalty bonus, in-house guest experience, season ticket loan, up to 50% discount off Eurostar, childcare vouchers, meditation classes, monthly social events and much more…

Painting is an important form in the visual arts, bringing in elements such as drawing, gesture (as in gestural painting), composition, narration (as in narrative art), or abstraction (as in abstract art).[2] Paintings can be naturalistic and representational (as in a still life or landscape painting), photographic, abstract, narrative, symbolistic (as in Symbolist art), emotive (as in Expressionism), or political in nature (as in Artivism).
×