printIter is called directly after function evaluations.
If there is a parent object, printIter will check for a parent.printIter function and call that.
If you have things that also need to run in the method printIter, you can create a method:
def _printIter*(self, ... ): pass
Where the * can be any string. If present, _printIter* will be called at the start of the default printIter call. You may also completely overwrite this function.