[Python-Dev] Semantic of isinstance (original) (raw)

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