title: Python self and super in multiple inheritance
body: <p>In Raymond Hettinger's talk "<a href="https://www.youtube.com/watch?v=EiOglTERPEo" rel="noreferrer">Super considered super speak</a>" at PyCon 2015 he explains the advantages of using <code>super</code> in Python in multiple inheritance context. This is one of the examples that Raymond used during his talk:</p>
  
  <pre><code>class DoughFactory(object):
      def get_dough(self):
          return 'insecticide treated wheat dough'
  
  
  class Pizza(DoughFactory):
      def order_pizza(self, *toppings):
          print('Getting dough')
          dough = super().get_dough()
          print('Making pie with %s' % dough)
          for topping in toppings:
              print('Adding: %s' % topping)
  
  
  class OrganicDoughFactory(DoughFactory):
      def get_dough(self):
          return 'pure untreated wheat dough'
  
  
  class OrganicPizza(Pizza, OrganicDoughFactory):
      pass
  
  
  if __name__ == '__main__':
      OrganicPizza().order_pizza('Sausage', 'Mushroom')
  </code></pre>
  
  <p>Somebody in the audience <a href="https://www.youtube.com/watch?v=EiOglTERPEo&amp;t=41m10s" rel="noreferrer">asked</a> Raymond about the difference of using <code>self.get_dough()</code> instead <code>super().get_dough()</code>. I didn't understand very well the brief answer of Raymond but I coded the two implementations of this example to see the differences. The output are the same for both cases:</p>
  
  <pre><code>Getting dough
  Making pie with pure untreated wheat dough
  Adding: Sausage
  Adding: Mushroom
  </code></pre>
  
  <p>If you alter the class order from <code>OrganicPizza(Pizza, OrganicDoughFactory)</code> to <code>OrganicPizza(OrganicDoughFactory, Pizza)</code> using <code>self.get_dough()</code>, you will get this result:</p>
  
  <p><code>Making pie with pure untreated wheat dough</code> </p>
  
  <p>However if you use <code>super().get_dough()</code> this is the output:</p>
  
  <p><code>Making pie with insecticide treated wheat dough</code></p>
  
  <p>I understand the <code>super()</code> behavior as Raymond explained. But what is the expected behavior of <code>self</code> in multiple inheritance scenario?</p>