title: Python's super(), abstract base classes, and NotImplementedError
body: <p><a href="https://stackoverflow.com/questions/3570796/why-use-abstract-base-classes-in-python">Abstract base classes can still be handy in Python.</a> In writing an abstract base class where I want every subclass to have, say, a <code>spam()</code> method, I want to write something like this:</p>
  
  <pre><code>class Abstract(object):
      def spam(self):
          raise NotImplementedError
  </code></pre>
  
  <p>The challenge comes in also wanting to use <code>super()</code>, and to do it properly by including it in the entire chain of subclasses. In this case, it seems I have to wrap every <code>super</code> call like the following:</p>
  
  <pre><code>class Useful(Abstract):
      def spam(self):
          try:
              super(Useful, self).spam()
          except NotImplementedError, e:
              pass
          print("It's okay.")
  </code></pre>
  
  <p>That's okay for a simple subclass, but when writing a class that has many methods, the try-except thing gets a bit cumbersome, and a bit ugly. Is there a more elegant way of subclassing from abstract base classes? Am I just Doing It Wrong?</p>