[Python-3000] PEP Parade

Samuele Pedroni pedronis at openendsystems.com
Tue May 1 22:34:58 CEST 2007


For what is worth changing func_code is supported both by PyPy and 
Jython. What cannot be done
in Jython is construct a code object out of a string of CPython 
bytecode, but it can be extracted from
other functions.

Jython 2.2b1 on java1.5.0_07
Type "copyright", "credits" or "license" for more information.
 >>> def f():
...    return 1
...
 >>> f()
1
 >>> def g():
...    return 2
...
 >>> f.func_code = g.func_code
 >>> f()
2
 >>>


Phillip J. Eby wrote:
> At 12:14 PM 5/1/2007 -0700, Guido van Rossum wrote:
>   
>> Suppose you couldn't assign to __class__ of a function (that's too
>> messy to deal with in CPython) and you couldn't assign to its __code__
>> either. What proposed functionality would you lose?
>>     
>
> The ability to overload any function, without having to track down all the 
> places it's already been imported or otherwise saved, and change them to 
> point to a new function or a non-function object.
>
>
>   
>> How would you
>> ideally implement that functionality if you had the ability to modify
>> CPython in other ways? (I'm guessing you'd want to add some
>> functionality to function objects; what would that functionality have
>> to do?)
>>     
>
> Hm...  well, in PyPy they have a "become" feature (I don't know if it's a 
> mainline feature or not) that allows you to say, "replace object A with 
> object B, wherever A is currently referenced".  Then the replacement object 
> (GF implementation) needn't even be a function.
>
> A narrower feature, however, more specific to functions, would just be 
> *some* way to redirect or guard the function's actual execution.  For 
> example, if function objects had a writable __call__ attribute, that would 
> be invoked in place of the normal behavior.  (Assuming there was a way to 
> save the old __call__ or make a copy of the function before it was modified.)
>
> I really just need a way to make calling the function do something 
> different from what it normally would -- and ideally this should be in such 
> a way that I could still invoke the function's original behavior.  (So it 
> can be used as the default method when nothing else matches, or the 
> least-specific fallback method.)
>
> _______________________________________________
> Python-3000 mailing list
> Python-3000 at python.org
> http://mail.python.org/mailman/listinfo/python-3000
> Unsubscribe: http://mail.python.org/mailman/options/python-3000/pedronis%40openendsystems.com
>   



More information about the Python-3000 mailing list