We hit some very weird behaviour recently while setting up a package hierarchy. Robin Becker managed to distil this into a simple example. Can anyone shed any light on what is happening below? Is Python behaving as it should? Create a package A, empty __init__.py, with modules as follows: --------parent.py---------- class Parent: pass --------child.py------------ from parent import Parent class Child(Parent): pass ---------test.py-------- from parent import * class Examiner: def examine(self, arg): print 'examining argument:' print 'class of arg =', arg.__class__ print 'bases of arg =', arg.__class__.__bases__ print 'arg =', arg if isinstance(arg, Parent): print "arg is an instance of Parent" else: print "arg IS NOT an instance of Parent" print if __name__=='__main__': from traceback import print_exc import sys def run0(): from A.child import Child e = Examiner() e.examine(Child()) def run1(): from A.child import Child from A.test import Examiner e = Examiner() e.examine(Child()) run0() run1() Running this script produces the following output: C:\users\andy\A>test.py examining argument: class of arg = A.child.Child bases of arg = (<class A.parent.Parent at 7f9150>,) arg = <A.child.Child instance at 7f9410> arg IS NOT an instance of Parent examining argument: class of arg = A.child.Child bases of arg = (<class A.parent.Parent at 7f9150>,) arg = <A.child.Child instance at 7f83c0> arg is an instance of Parent Many thanks, Andy Robinson