George Sakkis wrote: > > from itertools import chain, izip, repeat > > def ByteProperties(*names, **defaulted_names): > def byte_property(name, default): > return property(lambda self: getattr(self, name, default), > lambda self,v: setattr(self, name, v%256)) > def make_class(clsname, bases, dict): > for name,default in chain(izip(names, repeat(127)), > defaulted_names.iteritems()): > assert name not in dict # sanity check > dict[name] = byte_property('_'+name, default) > return type(clsname,bases,dict) > return make_class > > > class RC(object): > __metaclass__ = ByteProperties('pwm01', pwm02=64)
Notice that you are NOT using a custom metaclass here, you are just using the metaclass hook and you will avoid all issues of custom metaclasses. This is exactly the approach I advocate in the paper I referred before, so I think your solution is pretty safe in that respect. Still I think in this particular problem avoiding the __metaclass__ at all is possible and it should be preferred, just for sake of simplicity, not of safety). Michele Simionato M -- http://mail.python.org/mailman/listinfo/python-list