On Jun 11, 5:22 pm, George Sakkis <[EMAIL PROTECTED]> wrote: > On Jun 11, 10:37 am, Frank Millman <[EMAIL PROTECTED]> wrote: > > > You never *need* decorators, in the sense it's just syntax sugar for > things you might do without them, but they're handy once you get your > head around them. > > > Actually I did spend a bit of time trying to understand it before > > posting, and I have a question. > > > It seems that this is now a 'read-only' attribute, whose value is > > computed by the function the first time, and after that cannot be > > changed. It would probably suffice for my needs, but how easy would it > > be to convert it to read/write? > > It's straightforward, just define a setter wrapper and pass it in the > property along with the getter: > > def cachedproperty(func): > name = '__' + func.__name__ > def getter(self): > try: return getattr(self, name) > except AttributeError: # raised only the first time > value = func(self) > setattr(self, name, value) > return value > def setter(self, value): > setattr(self, name, value) > return property(getter,setter) >
Wonderful - this is very educational for me :-) Thanks very much Frank -- http://mail.python.org/mailman/listinfo/python-list