Using 'apply' as a decorator, to define constants

Jonathan Fine jfine at pytex.org
Sat Aug 22 08:04:02 EDT 2009


Steven D'Aprano wrote:
> On Sat, 22 Aug 2009 10:51:27 +0100, Jonathan Fine wrote:
> 
>> Steven D'Aprano wrote:
>>
>>> There's a standard idiom for that, using the property() built-in, for
>>> Python 2.6 or better.
>>>
>>> Here's an example including a getter, setter, deleter and doc string,
>>> with no namespace pollution, imports, or helper functions or deprecated
>>> built-ins:
>>>
>>> class ColourThing(object):
>>>     @property
>>>     def rgb(self):
>>>         """Get and set the (red, green, blue) colours.""" return
>>>         (self.r, self.g, self.b)
>>>     @rgb.setter
>>>     def rgb(self, rgb):
>>>         self.r, self.g, self.b = rgb
>>>     @rgb.deleter
>>>     def rgb(self):
>>>         del self.r, self.g, self.b
>>
>> Sorry, Steve, but I don't understand this.  In fact, I don't even see
>> how it can be made to work.
> 
> Nevertheless, it does work, and it's not even magic. It's described (very 
> briefly) in the docstring for property: help(property) will show it to 
> you. More detail is here:
> 
> http://docs.python.org/library/functions.html#property

My apologies.  I wasn't up to date with my Python versions:

| Changed in version 2.6: The getter, setter, and deleter
| attributes were added.

I was still thinking Python2.5 (or perhaps earlier?).  I still don't 
like it.  All those repetitions of 'rgb'.

-- 
Jonathan



More information about the Python-list mailing list