Franck Pommereau <[EMAIL PROTECTED]> wrote: ... > import new > def rename (fun, name) : > return new.function(fun.func_code, {}, name)
You need to make a new code object too: def int_result(fun) : def wrapped(*largs, **kwargs) : result = fun(*largs, **kwargs) if not isinstance(result, int) : raise TypeError, "should return int" return result w = wrapped.func_code c = new.code(w.co_argcount, w.co_nlocals, w.co_stacksize, w.co_flags, w.co_code, w.co_consts, w.co_names, w.co_varnames, w.co_filename, fun.func_name, w.co_firstlineno, w.co_lnotab, w.co_freevars, w.co_cellvars) return new.function(c, fun.func_globals, fun.func_name, fun.func_defaults, wrapped.func_closure) Of course, you should refactor these last three statement into a def remix(wrapped, fun): ... """ return a function like 'wrapped' but w/name and defaults fm 'fun' """ ...same 3 statements as above, from w = ... onwards... Alex -- http://mail.python.org/mailman/listinfo/python-list