[Python-Dev] The decorator(s) module (original) (raw)

Thomas Wouters thomas at xs4all.net
Sat Feb 11 13:51:02 CET 2006


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 <thomas at xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!



More information about the Python-Dev mailing list