As a result "dog.__class__ is Animal" returns False, "isinstance(dog, Animal)" returns True.
class Animal: pass class Dog (Animal): pass dog = Dog() print dog.__class__ is Animal print isinstance(dog, Animal)
Things to considerFor C# programmer, this is confusing as "is" operator in C# works as "ins instance" of Python.
In python idiom, you are not encouraged to use type-checking, instead use duck typing instead. In short, you just execute if an object can quack or not instead of checking an object is an instance of a duct that quacks.
class Duck(object): def quack(self): print "QUACK!!!" class DonaldDuck(object): def quack(self): print "quack!" def canQuack(duckType): duckType.quack() duck = Duck() donaldDuck = DonaldDuck() canQuack(duck) canQuack(donaldDuck)