#!/usr/bin/env python # encoding: utf-8 def save_desc(self, desc, *args, **kwargs):    self.desc = desc    self.__init_orig__(*args, **kwargs) class DescMetaclass(type):                                                                 def __new__(cls, name, bases, attrs):       if not name == 'Field':          attrs['__init_orig__'] = attrs['__init__']          attrs['__init__'] = save_desc       return type.__new__(cls, name, bases, attrs)    class Field(object):        __metaclass__ = DescMetaclass    def __init__(self, widget=None, required=True):       self.d={}       self.d['widget'] = widget       self.d['required'] = required           def render(self):       print self.desc       print self.d class RegExpField(Field):        def __init__(self, widget=None, required=True, regexp=None, caseSensivity=False):       Field.__init__(self, widget=widget, required=required)       self.d['regexp'] = regexp       self.d['caseSensivity'] = caseSensivity     def main():          t=RegExpField('aaaa', regexp='.+', widget=123)     t.render() if __name__ == '__main__':     main()