Polymorphism, or dynamic binding, is the ability to use an instance without regard for its type. It is handled entirely through the attribute lookup process described for inheritance in the preceding section. Whenever a method is accessed as obj.method(), method is located by searching within the instance itself, the instance’s class definition, and then base classes, in that order. The first match found is used as the method. For special methods such as __getattr__(), Python first searches in the instance’s class definition, followed by base classes.