Bryan schrieb:
I have several properties on a class that have very similar behavior. If one of the properties is set, all the other properties need to be set to None. So I wanted to create these properties in a loop like:class Test(object): for prop in ['foo', 'bar', 'spam']: # Attribute that data is actually stored in field = '_' + prop # Create getter/setter def _get(self): return getattr(self, field) def _set(self, val): setattr(self, field, val) for otherProp in prop: if otherProp != prop: setattr(self, '_' + otherProp, None) # Assign property to class setattr(Test, prop, property(_get, _set)) t = Test() t.foo = 1 assert t.bar == t.spam == None But the class Test is not defined yet, so I can't set a property on it. How can I do this?
With a metaclass, or a post-class-creation function. Which is a metaclass without being fancy.
Just put your above code into a function with the class in question as argument, and invoke it after Test is defined.
Diez -- http://mail.python.org/mailman/listinfo/python-list
