Por que não pode passar * args e ** kwargs em __init__ de uma classe filho

Para entender * args e ** kwargs, fiz algumas pesquisas sobre quando caí nessa questão* args e ** kwargs?

A resposta abaixo da resposta escolhida chamou minha atenção, que é esta:

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)

Eu tentei algumas coisas neste exemplo e executando o código desta maneira:

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')

Eu tenho esse:

[...]
    super(MyFoo, self).__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'stack'

Mudando para ser comosuper(MyFoo, self).__init__(args, kwargs)

os resultados são:

('Python', 2.7) {'stack': 'overflow'}
I think something is being called here
('Python', 2.7) {'stack': 'overflow'}

Por algumas razões que me incomodam, estou questionando o seguinte: o que poderia estar certo e errado no exemplo acima? O que seria permitido fazer e o que não seria na produção da vida real?

questionAnswers(4)

yourAnswerToTheQuestion