NEWBIE: What's the instance name?

Peter Otten __peter__ at web.de
Mon Dec 29 10:27:52 CET 2003


Bengt Richter wrote:

> On 29 Dec 2003 00:36:09 -0800, danb_83 at yahoo.com (Dan Bishop) wrote:
> 
>>engsolnom at ipns.com wrote in message
>>news:<6q2vuv45lsah3epo9loa7l2tp9517makk4 at 4ax.com>...
>>> Hi,
>>> I've been using constructs(?) like the below.
>>> 
>>> def display(instance, start = None, end = None):
>>>     if instance.__class__.__name__ == 'UPCA':
>>
>>You might want to try the isinstance function.
> 
> <nit>
> 
> That's the usual idiom, but it should be noted that
> it's not exactly the same, e.g.,
> 
>  >>> class A: pass
>  ...
>  >>> class B(A): pass
>  ...
>  >>> a=A(); b=B()
>  >>> isinstance(a, A)
>  True
>  >>> isinstance(b, A)
>  True
>  >>> a.__class__.__name__ == 'A'
>  True
>  >>> b.__class__.__name__ == 'A'
>  False
> 
> That last, again, is not the same as
>  >>> isinstance(b, A)
>  True
> 
> </nit>

A few more lines to the fine print:

>>> class A: pass
...
>>> a1 = A()
>>> class A: pass
...
>>> a2 = A()
>>> a1.__class__.__name__ == "A"
True
>>> a2.__class__.__name__ == "A"
True
>>> a1.__class__ == A
False
>>> a2.__class__ == A
True
>>>

If you care about the class at all (and I think most of the time you
shouldn't) then compare classes, not names: 

instance.__class__ == Class 
instance.__class__ is Class


Peter






More information about the Python-list mailing list