On Aug 17, 7:51 pm, André <[EMAIL PROTECTED]> wrote: > I didn't want to hijack the original thread but I have basically the > same request... > > On Aug 17, 7:09 am, Bruno Desthuilliers<[EMAIL PROTECTED]> wrote: > > akonsu a écrit :> hello, > > [SNIP] > > > > > Wrong solution to your problem, I'd say. Let's start again: > > > """ > > > i need to add properties to instances dynamically during run time. > > > this is because their names are determined by the database contents. > > """ > > > Care to elaborate ? I may be wrong, but I suspect you're trying to roll > > your own python/database mapper. If so, there are quite a couple Python > > ORMs around. Else, please tell us more. > > I'm not the original poster, but I'd like to do the same thing (for a > different reason). > > I have a program (crunchy) that is extensible via plugins. New > options available via plugins can be turned on or off (or selected > among a list of options). I have a module for user preferences (let's > call it prefs.py) that allows the setting of these options (and do > error checking, automatic saving of the options selected for future > sessions, etc.). These options are implemented as properties. > > Currently I have it simplified so that only two lines need to be added > to prefs.py to add new options; something like > options = { ... > 'new_option': [value1, value2, ..., valueN], > ...} > > and > class Preferences(object): > ... > > new_option = make_property('new_option', 'some nicely worded help > string') > > === > make_property is a custom define function that return fgets, fsets, > fdel and doc. > > Ideally, I'd like to be able to define new would-be properties from > the plugin and add them to the class prior to creating instances. In > other words, have something like > > === > for option in options_defined_in_plugins: > add_option_as_property_to_Preferences(Preferences, option, ...) > > user_preferences = Preferences() > > Performance in this case would not be an issue. > > Cheers, > > André
You can dynamicly add properties to a class just before returning the instance using __new__(): class AClass(object): def __new__(cls): setattr(cls,"active", property(fget = ..., fset = ..., fdel = ..., doc = ...)) obj = super(BaseGroup, cls).__new__(cls) return obj You can put this in a for loop and add a property per option, etc. - Rafe -- http://mail.python.org/mailman/listinfo/python-list