title: Resolving Diamond Inheritance within Python Classes
body: <p>Consider the following python code:</p>
  
  <pre><code>class Parent(object):
      def __init__(self, name, serial_number):
          self.name = name
          self.serial_number = serial_number
  
  
  class ChildA(Parent):
      def __init__(self, name, serial_number):
          self.name = name
          self.serial_number = serial_number
          super(ChildA, self).__init__(name = self.name, serial_number = self.serial_number)
  
      def speak(self):
          print("I am from Child A")
  
  
  class ChildB(Parent):
      def __init__(self, name, serial_number):
          self.name = name
          self.serial_number = serial_number
          super(ChildB, self).__init__(name = self.name, serial_number = self.serial_number)
  
      def speak(self):
          print("I am from Child B")
  
  
  class GrandChild(ChildA, ChildB):
      def __init__(self, a_name, b_name, a_serial_number, b_serial_number):
          self.a_name = a_name
          self.b_name = b_name
          self.a_serial_number = a_serial_number
          self.b_serial_number = b_serial_number
          super(GrandChild, self).__init_( something )
  </code></pre>
  
  <p>When running the <code>super</code> function in GrandChild, what is the proper way to format the <code>__init__</code> arguments so that ChildA and ChildB both get the correct arguments?</p>
  
  <p>Also how do you access the two different versions of the <code>speak</code> method (ChildA's version and ChildB's version) from within the GrandChild class?</p>