the image below shows the complete class hierarchy and our two account objects when creating annesaccpython looks for the constructor method in the savingsaccount classdoesn' find onand moves on to the account class it then modifies the newly created object as coded in the init method of the account class when creating the stefansacc objectpython finds constructor method in the checkingaccount class and uses this constructor directly to modify the newly created object when we apply the deposit method on either the annesacc or the stefansacc objectpython will execute the deposit method of the account classbecause it doesn' find deposit method anywhere lower in the tree when we apply the withdraw method on the stefansacc objectagainpython finds the method definition in the checkingaccount class and executes this method when we apply withdraw on annesaccpython executes the deposit method defined in the account class we just saw an example of polymorphism the word polymorphism is derived from the greek word for 'having multiple formsin this caseit means that we can call method that has the same name (for instance withdrawon several objects (here annesacc and stefansacc)and what happens depends on the inheritance hierarchy of the classes from which the objects were created the nice thing here isat the point of time when we do the withdrawalwe simply say accountobject withdraw(amountand we don' need to care about whether the accountobject is savings or checking account python knows which inheritance lines to follow and the desired behavior is produced in either case of coursewe could simply have defined the withdraw method twiceonce in the savingsaccount class and once in the checkingaccount class we defined the method in the superclass here in order to give an example for overriding methods annemarie friedrichcis lmu munchenws /