On 11/29/2012 9:59 AM, lars van gemerden wrote:
Hi,

I have encountered some strange behavior of isinstance(/issubclass): depending 
on the import path used for classes i get different output, while the classes i 
compare are in the same file.

Basically if i import a class as:

     from mod1.mod2 import A
or:
     from mod0.mod1.mod2 import A

which both result in importing the same class,

As other said, both import the same abstract class but create two different concrete class objects.

> a call to isinstance(inst, A) in another module can have a different output.
In this module
     print type(inst), A, isinstance(inst, A), issubclass(type(inst), A)
gives:
     <class 'mod0.mod1.mod2.A'> <class 'mod1.mod2.A'> False False

Add print id(type(inst)), id(A) and you will see that they are different objects. The isinstance and issubclass calls compare the classes by identity (the default meaning of ==) and so False, False are correct.

--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to