Welcome, guest | Sign In | My Account | Store | Cart
#
#
def prop(func):
   
'''A decorator function for easy property creation.

        >>> class CLS(object):
        ...   def __init__(self):
        ...      self._name='
Runsun Pan'
        ...      self._mod='
panprop'
        ...      self.CLS_crazy = '
Customized internal name'
        ...
        ...   @prop
        ...   def name(): pass           # Simply pass
        ...
        ...   @prop
        ...   def mod():                 # Read-only, customized get
        ...      return {'
fset':None,
        ...              '
fget': lambda self: "{%s}"%self._mod  }
        ...
        ...   @prop
        ...   def crazy():               # Doc string and customized prefix
        ...      return {'
prefix': 'CLS_',
        ...              '
doc':'I can be customized!'}

        >>> cls = CLS()

        ----------------------------   default
        >>> cls.name
        '
Runsun Pan'

        >>> cls.name = "Pan"
        >>> cls.name
        '
Pan'

        ---------------------------   Read-only
        >>> cls.mod
        '
{panprop}'

        Trying to set cls.mod=??? will get:
        AttributeError: can'
t set attribute

       
---------------------------   Customized prefix for internal name
       
>>> cls.crazy      
       
'Customized internal name'

       
>>> cls.CLS_crazy
       
'Customized internal name'

       
---------------------------   docstring
       
>>> CLS.name.__doc__
       
''
     
       
>>> CLS.mod.__doc__
       
''
     
       
>>> CLS.crazy.__doc__
       
'I can be customized!'

       
---------------------------  delete
       
>>> del cls.crazy

       
Trying to get cls.crazy will get:
       
AttributeError: 'CLS' object has no attribute 'CLS_crazy'
     
   
'''
    ops = func() or {}
    name=ops.get('
prefix','_')+func.__name__ # property name
    fget=ops.get('
fget',lambda self:getattr(self, name))
    fset=ops.get('
fset',lambda self,value:setattr(self,name,value))
    fdel=ops.get('
fdel',lambda self:delattr(self,name))
    return property ( fget, fset, fdel, ops.get('
doc','') )
#
#

History

  • revision 4 (14 years ago)
  • previous revisions are not available