Richard Riehle wrote: > Decorators are new in Python, so there are not a lot of people using them.
The principle of decorators themselves is as old as Python itself. You could implement them as far back as Python 1.5, if not older: [steve@ando ~]$ python1.5 Python 1.5.2 (#1, Aug 27 2012, 09:09:18) [GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2 Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> def decorator(func): ... def inner(arg, func=func): ... return func(arg*2) ... return inner ... >>> def f(x): ... return x + 1 ... >>> f = decorator(f) >>> f(1) 3 >>> f(5) 11 The first built-in decorators (classmethod, staticmethod and property) were added in Python 2.2. Decorator syntax using @ was added in 2.4. https://docs.python.org/2/whatsnew/2.4.html#pep-318-decorators-for-functions-and-methods So decorators have been available for a very long time. > From my experience with other languages, especially Ada and Eiffel, I > enjoy the benefit of assertions (as pre-conditions and post-conditions and > invariants) at the specification level (not embedded in the code), so > decorators are closer to my other experience. They bring me closer to > the Design by Contract model of Ada and Eiffel. That is why I was so > pleased to see them added to Python. Way back in Python 1.5, Guido van Rossum wrote an essay describing a way to get Eiffel-like checks for pre-conditions and post-conditions: https://www.python.org/doc/essays/metaclasses/ (Alas, the link to Eiffel.py is currently broken. But you can read the rest of the essay.) > It is true, however, that they are not immediately intutive in Python, but > once understood, they are handy IMHO for improving code reliability. > Perhaps I was spoiled by having this capability in some other languages. -- Steven -- https://mail.python.org/mailman/listinfo/python-list