Почему нельзя передавать * args и ** kwargs в __init__ дочернего класса

Чтобы понять * args и ** kwargs, я немного обыскал, когда задался этим вопросом* args и ** kwargs?

Ответ ниже выбранного ответа привлек мое внимание, а именно:

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)

Я попробовал кое-что на этом примере и запустил код следующим образом:

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

Я получил это:

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

Меняется, чтобы быть похожимsuper(MyFoo, self).__init__(args, kwargs)

результаты:

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

По какой-то причине, о которой я говорю, я задаюсь вопросом: что может быть правильным и неправильным в приведенном выше примере? Что будет разрешено делать, а что нет в реальной жизни?

Ответы на вопрос(4)

Ваш ответ на вопрос