Warum können * args und ** kwargs nicht in __init__ einer untergeordneten Klasse übergeben werden?

Um * args und ** kwargs zu verstehen, habe ich einige Nachforschungen angestellt, als ich auf diese Frage gestoßen bin* args und ** kwargs?

Die Antwort unterhalb der gewählten Antwort hat meine Aufmerksamkeit erregt.

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)

In diesem Beispiel habe ich einige Dinge ausprobiert und den Code folgendermaßen ausgeführt:

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

Ich habe folgendes:

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

Ändern, wie zu seinsuper(MyFoo, self).__init__(args, kwargs)

Die Ergebnisse sind:

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

Aus blassen Gründen stelle ich Folgendes in Frage: Was könnte im obigen Beispiel richtig und falsch sein? Was darf und was nicht in der realen Produktion?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage