Robert Brewer wrote: ....... ..........
You *are* using a language with callable functions, right? ;)
#base.py
def create_special_property(cls, f): # create special property based on f
class M(type): def __init__(cls, name, bases, dict): super(M, cls).__init__(name, bases, dict) for f in dict['_fieldDefs']: create_special_property(cls, f)
#database.py class C(A): _fieldDefs =[ IntColumn('id',primaryKey=1,allowNull=0), TextColumn('name',allowNull=0,size=50), TextColumn('description',allowNull=1,size=50), ]
base.create_special_property(C, DateColumn('start_date'))
You're absolutely right :) I can modify the class in place if I have access to the required modifications.
This seems more easily assimilable and definitely works in my cases.
Would it make sense to put the def create_special_property inside the metaclass as it then becomes available as a class method of A as well as being visible as cls.create_special_property(f) in the metaclass __init__?
Slightly off-topic: if you really want to make it pretty, add a custom descriptor so you can write:
class C(A): id = IntColumn(primaryKey=1,allowNull=0) name = TextColumn(allowNull=0,size=50) description = TextColumn(allowNull=1,size=50)
I'll certainly take a look at this
See UnitProperty (the descriptor), MetaUnit (the metaclass), and Unit (the domain object) in http://www.aminus.org/rbre/dejavu/__init__.py for an implementation of mine which you can steal in toto (because it's public domain).
-- Robin Becker
-- http://mail.python.org/mailman/listinfo/python-list