Revision: 18755
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 7, 2009 16:26 by manatlan
Initial Code
import os class _FieldBase_: _defines=[] def __init__(self,*a): _FieldBase_._defines.append(self) class _FieldedMetaClass_(type): def __init__(cls, name, bases, dct): super(_FieldedMetaClass_, cls).__init__(name, bases, dct) if name!="Form": fields_to_name = dict([(slot,name) for name,slot in dct.items() if isinstance(slot,_FieldBase_)]) cls.fields = [(fields_to_name[obj],obj ) for obj in _FieldBase_._defines] _FieldBase_._defines=[] # reset list !!! class Form (object): __metaclass__ = _FieldedMetaClass_ def __repr__(self): l=["Form '%s'"%self.__class__.__name__] l+=["* %-10s : %s"%(f,t.__class__.__name__) for f,t in self.fields] return os.linesep.join(l) class FieldInt(_FieldBase_): def __init__(self,*a): _FieldBase_.__init__(self,a) class FieldString(_FieldBase_): def __init__(self,*a): _FieldBase_.__init__(self,a) class Form1(Form): name = FieldString(1) surname = FieldString(2) age = FieldInt(3) class Form2(Form): nb = FieldInt(1) title = FieldString(2) print Form1() print Form2()
Initial URL
Initial Description
Like Django.models, GAE.db.model or SqlAlchemy definitions
Initial Title
Create class definitions of properties (typed and ordered) with metaclass
Initial Tags
python
Initial Language
Python