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.

Unless an exception is raised,
    @wibble
    def wobble():
        pass
will make an assignment to wobble, namely the return value of wibble. So in your example above, there will be /three/ assignments to rgb. Unless you do some complicated introspection (and perhaps not even then) surely they will clobber each other.

I still prefer:
    @wibble.property
    def rgb():
        '''Red Green Blue color settings (property)'''

        def fset(rgb):
            self.r, self.g, self.b = rgb
        return locals()

--
Jonathan
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to