[Python-Dev] The decorator(s) module

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

AltStyle によって変換されたページ (->オリジナル) /