I'm currently in pdb trace to figure this out
ipdb> isinstance(var, Type) False ipdb> type(var) <class 'module.Type'> ipdb> Type <class 'module.Type'>
Why can this happen?
P. S. isinstance(var, type(var))
returns True
as expected
I can only guess, but if you do in module
class Type(object): pass var = Type() class Type(object): pass
then both types look like <class 'module.Type'>
, but are nevertheless different.
You could check that with
print(id(Type), id(var.__class__))
or with
print(Type is var.__class__)
Note that these comparisons work for both old-, and new-style classes. For new-style classes, they are equivalent to print(Type is type(var))
. But this is not the case for old-style classes.
Another quite common trap is that you call this module with
python -m module
or
python module.py
making it known as __main__
module. If it is imported somewhere else under its true name, it is known under that name as well with a different name space.
Another guess could be that you are working with ABCs or otherwise let the class have a __instancecheck__()
method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With