[Python-Dev] [Python-3000] Code freeze?

Nick Coghlan ncoghlan at gmail.com
Fri Feb 29 12:39:22 CET 2008


Christian Heimes wrote:
> Barry Warsaw wrote:
>> Okay, let's go ahead and make it official.
>>
>> I plan on cutting the alphas for 2.6 and 3.0 at about 6pm Eastern
>> (UTC-5) time or 2300 UTC.  Let's freeze the tree one hour prior to
>> that: 2200 UTC Friday 29-Feb-2008.
> 
> Linux is looking good. I've fixed some minor Windows issue in the last
> 30 minutes. I found one strange behavior. Some tests were failing
> because iter(fileobj) where fileobj is a tempfile._TemporaryFileWrapper
> failed. Apparently iter() doesn't use __getattr__ to acquire the
> __iter__ method. Is this behavior deliberately?

The interpreter is actually permitted to bypass the instance when 
looking up magic methods. Whether it does or not is implementation 
dependent - even CPython varies its behaviour depending on the specific 
circumstance (e.g. the translation of with statements to bytecode ends 
up using normal GET_ATTR opcodes, so those will see __enter__ and 
__exit__ methods on instances, but most of the magic method lookups from 
C code bypass the instance and go straight to the relevant tp_* slot).

I'd call this behaviour a bug in _TemporaryFileWrapper, since it's 
delegation trick in __getattr__ isn't guaranteed to work for the magic 
methods. I'm actually becoming less and less enamoured of that shortcut 
every day - given that we've already had to spell out the file method 
and property delegation for SpooledTemporaryFile in 2.6, I'm tempted to 
start spelling it out for _TemporaryFileWrapper as well.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-Dev mailing list