title: Why does Python 2's `super` require explicit class and self arguments?
body: <p><a href="http://code.activestate.com/recipes/577720-how-to-use-super-effectively/" rel="nofollow">This Python 2 example</a>:</p>
  
  <pre class="lang-py prettyprint-override"><code>class LoggingDict(dict):
      # Simple example of extending a builtin class
      def __setitem__(self, key, value):
          logging.info('Setting %r to %r' % (key, value))
          super(LoggingDict, self).__setitem__(key, value)
  </code></pre>
  
  <p>and <a href="http://code.activestate.com/recipes/577720-how-to-use-super-effectively/" rel="nofollow">this Python 3 example</a>:</p>
  
  <pre class="lang-py prettyprint-override"><code>class LoggingDict(dict):
      # Simple example of extending a builtin class
      def __setitem__(self, key, value):
          logging.info('Setting %r to %r' % (key, value))
          super().__setitem__(key, value)
  </code></pre>
  
  <p>illustrate the fact that Python 2's <code>super</code> requires explicit class and <code>self</code> arguments (but Python 3's doesnt). Why is that? It seems like an irritating limitation.</p>