timerdeco.py

  This is one way to code the first question’s solution.  The trick lies 
  in replacing nested classes with nested functions, so the self argument 
  is not the decorator’s instance, and assigning the total time to the 
  decorator function itself as an attribute, so it can be fetched later 
  through the original rebound name.  

  See the section "Decorator State Retention Options" of this chapter for
  details.  Functions support arbitrary attribute attachment, and the 
  function name is an enclosing scope reference in this context. If you 
  wish to expand this further, it might be useful to also record the best
  (minimum) call time in addition to the total time, as we did in 
  Chapter 21's timer examples.

timerdeco_test.py

  Tests coded in a separate file to allow the decorator to be easily reused.

results.txt

  Output of the preceding script.

