title: Why can't pass *args and **kwargs in __init__ of a child class
body: <p>To understand *args and **kwargs I made some searchs about, when I fell on this question <a href="https://stackoverflow.com/questions/3394835/args-and-kwargs">*args and **kwargs?</a></p>
  
  <p>The answer below the chosen answer caught my attention, which is this:</p>
  
  <pre><code>class Foo(object):
      def __init__(self, value1, value2):
      # do something with the values
          print value1, value2
  
  class MyFoo(Foo):
      def __init__(self, *args, **kwargs):
      # do something else, don't care about the args
          print 'myfoo'
          super(MyFoo, self).__init__(*args, **kwargs)
  </code></pre>
  
  <p>I tried some things on this example and running the code this way:</p>
  
  <pre><code>class Foo(object):
      def __init__(self, value1, value2):
      # do something with the values
          print 'I think something is being called here'
          print value1, value2
  
  
  class MyFoo(Foo):
      def __init__(self, *args, **kwargs):
      # do something else, don't care about the args
          print args, kwargs
          super(MyFoo, self).__init__(*args, **kwargs)
  
  
  foo = MyFoo('Python', 2.7, stack='overflow')
  </code></pre>
  
  <p>I got this:</p>
  
  <pre><code>[...]
      super(MyFoo, self).__init__(*args, **kwargs)
  TypeError: __init__() got an unexpected keyword argument 'stack'
  </code></pre>
  
  <p>Changing to be like <code>super(MyFoo, self).__init__(args, kwargs)</code></p>
  
  <p>the results are:</p>
  
  <pre><code>('Python', 2.7) {'stack': 'overflow'}
  I think something is being called here
  ('Python', 2.7) {'stack': 'overflow'}
  </code></pre>
  
  <p>For some blow mind reasons I'm questioning this: what could be right and wrong in the example above? What would be allowed to do and what wouldn't in real life production?</p>