[Python-3000] Assignment decorators, anyone?

Steven Bethard steven.bethard at gmail.com
Mon Jun 12 20:03:21 CEST 2006


On 6/8/06, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> I think I've come across a use case for @decorators
> on assignment statements.
>
> I have a function which is used like this:
>
>    my_property = overridable_property('my_property', "This is my property.")
>
> However, it sucks a bit to have to write the name of
> the property twice. I just got bitten by changing the
> name of one of my properties and forgetting to change
> it in both places.
>
> If decorators could be applied to assignment statements,
> I'd be able to write it as something like
>
> @overridable_property
> my_property = "This is my property."
>
> (This would require the semantics of assignment
> decoration to be defined so that the assigned name
> is passed to the decorator function as well as the
> value being assigned.)
>
> On the other hand, maybe this is a use case for
> the "make" statement that was proposed earlier.

Yes, `PEP 359`_ provided functionality like this, but since it's
withdrawn, another option for you is something like::

    class my_property:
        __metaclass__ = overridable_property
        text = "This is my property."

where overridable_property looks something like:

    def overridable_property(name, args, kwargs):
        text = kwargs.pop('text')
        # do whatever you normally do with name and text

(This is basically all the "make" statement was doing under the covers
anyway.)  Of course, the end result is that you use a class statement
to create something that isn't a class, but at least you manage to
avoid writing "my_property" twice.

.. _PEP 359: http://www.python.org/dev/peps/pep-0359/

STeVe
-- 
Grammar am for people who can't think for myself.
        --- Bucky Katt, Get Fuzzy


More information about the Python-3000 mailing list