On Fri, Feb 10, 2006 at 10:32:23PM +0100, Georg Brandl wrote:

> Unfortunately, a @property decorator is impossible...

Depends. You can do, e.g.,

def propertydef(propertydesc):
    data = propertydesc()
    if not data:
        raise ValueError, "Invalid property descriptors"
    getter, setter, deller = (data + (None, None))[:3]
    return property(fget=getter, fset=setter, fdel=deller,
                    doc=propertydesc.__doc__)

and use it like:

class X(object):
    def __init__(self):
        self._prop = None

    @propertydef
    def prop():
        "Public, read-only access to self._prop"
        def getter(self):
            return self._prop
        return (getter,)

    @propertydef
    def rwprop():
        "Public read-write access to self._prop"
        def getter(self):
            return self._prop
        def setter(self, val):
            self._prop = val
        def deller(self):
            self._prop = None
        return (getter, setter, deller)


    @propertydef
    def hiddenprop():
        "Public access to a value stored in a closure"
        prop = [None]
        def getter(self):
            return prop[0]
        def setter(self, val):
            prop[0] = val
        def deller(self):
            prop[0] = None
        return (getter, setter, deller)

-- 
Thomas Wouters <[EMAIL PROTECTED]>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to