import __main__ #import __builtin__ def builtin(name): """You can modify this code to add the object to __builtin__ rather than __main__""" exec("%s.__name__ = '%s'; __main__.__dict__['%s'] = %s" % (name,name,name,name)) def update_extend_meta(dict, name): for k,v in dict.items(): if(type(v).__name__ in ("_MetaExtend", "type", "classobj") ): dot = ("." if (not name.endswith(".")) else "") fullname = name + dot + k if(fullname.endswith(".")): fullname = name builtin(fullname) update_extend_meta(v.__dict__, fullname) class _MetaExtend(type): def __new__(cls, name, bases, dict): if not bases: return type.__new__(cls, name, bases, dict) if len(bases) != 2: raise TypeError, "A extend class definition must have only one base class to extend" base = bases[1] for k, v in dict.items(): if k == '__module__': continue setattr(base, k, v) update_extend_meta(base.__dict__, base.__name__) return base class extend: __metaclass__ = _MetaExtend