Lee Harr wrote: > I understand how to create a property like this: > > class RC(object): > def _set_pwm(self, v): > self._pwm01 = v % 256 > def _get_pwm(self): > return self._pwm01 > pwm01 = property(_get_pwm, _set_pwm) > > > But what if I have a whole bunch of these pwm properties? > > I made this: > > class RC(object): > def _makeprop(name): > prop = '_%s' % name > def _set(self, v): > v_new = v % 256 > setattr(self, prop, v_new) > def _get(self): > return getattr(self, prop) > return property(_get, _set) > > pwm01 = _makeprop('pwm01') > pwm02 = _makeprop('pwm02') > > > Not too bad, except for having to repeat the name. > > I would like to just have a list of pwm names and > have them all set up like that. It would be nice if > each one was set to a default value of 127 also.... > > Any thoughts? >
Yes, what about this? import sys def defprop(name, default=127): loc = sys._getframe(1).f_locals prop = '_%s' % name def _set(self, v): v_new = v % 256 setattr(self, prop, v_new) def _get(self): return getattr(self, prop, default) loc[name] = property(_get, _set) class RC(object): defprop('pwm01') defprop('pwm02') rc = RC() print rc.pwm01 # 127 print rc.pwm02 # 127 rc.pwm02 = 1312 print rc.pwm02 # 32 This is a bit hackish, but I would prefer this over a metaclass solution. since it does not add any hidden magic to your class. Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list