[Python-Dev] Semantic of isinstance

Phillip J. Eby pje at telecommunity.com
Tue Jun 27 15:48:58 CEST 2006

At 10:13 PM 6/26/2006 -0700, Guido van Rossum wrote:
>On 6/26/06, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>>Phillip J. Eby wrote:
>> > It's not inconsistent - isinstance() checks __class__ in *addition* to
>> > type() in order to allow proxying tricks like lying about your
>> > __class__.
>>If this is a deliberate feature, it's a bit patchy, because
>>it means the proxy can't lie about *not* being an instance
>>of its real type.
>>Perhaps Guido could clarify how much lying a proxy is
>>supposed to be able to get away with?
>Sorry, I don't remember all the constraints. Read the code and weep.
>This should be revisited for Py3k. The code became convoluted out of
>some needs in Zope; I can't remember if it was Zope 2 or Zope 3 that
>needed this (probably both) and I can't remember the specific
>situation where it was needed.

It was Zope 3 security proxies, although *any* proxy type benefits.  The 
idea was to make proxy objects be able to lie about their __class__ and be 
believed by isinstance().  However, there was no requirement that 
isinstance(ob, Proxy) return False, so that's not implemented.  And lying 
about __bases__ appears to only be allowed for things that aren't types.

More information about the Python-Dev mailing list