The is
operator in Python checks that the two arguments refer to the same object in memory; it is not like the is
operator in C#.
The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value.
What you’re looking for in this case is isinstance
.
Return true if the object argument is an instance of the classinfo argument, or of a (direct or indirect) subclass thereof.
>>> class animal(object): pass
>>> class dog(animal): pass
>>> myDog = dog()
>>> isinstance(myDog, dog)
True
>>> isinstance(myDog, animal)
True
However, idiomatic Python dictates that you (almost) never do type-checking, but instead rely on duck-typing for polymorphic behavior. There’s nothing wrong with using isinstance
to understand inheritance, but it should generally be avoided in “production” code.