def fullcascade(attr, doc=''):
 def getter(self):
  return getattr(self._items[0], attr)
 def setter(self, value):
  for item in self:
   setattr(item, attr, value)
 return property(fget=getter, fset=setter, doc=doc)

def fullcascade ( attr , doc = '' ) : def getter ( self ) : return getattr ( self . _items [ 0 ] , attr ) def setter ( self , value ) : for item in self : setattr ( item , attr , value ) return property ( fget = getter , fset = setter , doc = doc )
returns a getter property with a cascading setter .