On 06/23/2010 08:39 AM, Satish Eerpini wrote: > > > I want to test whether an object is an instance of any > user-defined > class. "isinstance" is less helpful than one would expect. > > >>> import types > >>> class foo() : # define dummy class > ... pass > ... > >>> x = foo() > >>> > >>> type(x) > <type 'instance'> > >>> > >>> isinstance(x, types.ClassType) > False > >>> isinstance(x, types.InstanceType) > True > >>> foo > <class __main__.foo at 0x004A2BD0> > >>> x > <__main__.foo instance at 0x020080A8> > > So far, so good. x is an InstanceType. But let's try a > class with a constructor: > > >>> class bar(object) : > ... def __init__(self, val) : > ... self.val = val > ... > >>> b = bar(100) > >>> b > <__main__.bar object at 0x01FF50D0> > >>> isinstance(b, types.InstanceType) > False > >>> isinstance(b, types.ClassType) > False > >>>>>> bar > <class '__main__.bar'> > > well the same code on my side returns true when you run isinstance(b, > types.InstanceType) even when the class has a constructor. Why is there > a difference in the output when we are both using Cython 2.6 ?? (2.6.4 > to be exact)
I assume you mean CPython, not Cython. As Gabriel said, the difference is that bar is a subclass of object. If isinstance(bar(100), types.InstanceType), then you did not subclass object, and get an old-style class. -- http://mail.python.org/mailman/listinfo/python-list