starting extender method in super method ending extender method provider in provider action abstract superclasses of the prior example' classesprovider may be the most crucial to understand when we call the delegate method through provider instancetwo independent inheritance searches occur on the initial delegate callpython finds the delegate method in super by searching the provider instance and above the instance is passed into the method' self argument as usual inside the super delegate methodself action invokes newindependent inheritance search of self and above because self references provider instancethe action method is located in the provider subclass this "filling in the blankssort of coding structure is typical of oop frameworks in more realistic contextthe method filled in this way might handle an event in guiprovide data to be rendered as part of web pageprocess tag' text in an xml fileand so on--your subclass provides specific actionsbut the framework handles the rest of the overall job at least in terms of the delegate methodthe superclass in this example is what is sometimes called an abstract superclass-- class that expects parts of its behavior to be provided by its subclasses if an expected method is not defined in subclasspython raises an undefined name exception when the inheritance search fails class coders sometimes make such subclass requirements more obvious with assert statementsor by raising the built-in notimplementederror exception with raise statements we'll study statements that may trigger exceptions in depth in the next part of this bookas quick previewhere' the assert scheme in actionclass superdef delegate(self)self action(def action(self)assert false'action must be defined!if this version is called super( delegate(assertionerroraction must be definedwe'll meet assert in and in shortif its first expression evaluates to falseit raises an exception with the provided error message herethe expression is inheritance