Warum nimmt `object .__ init__` keine Argumente an?

Warum nicht?object.__init__ nehmen*args, **kwargs als Argumente? Dies unterbricht einen einfachen Code auf höchst ärgerliche Weise, ohne irgendwelche Nachteile, soweit ich sehen kann:

Sagen wir, wir wollen das alles sicherstellen__init__'s aller Elternklassen heißen. Solange jedes Init der einfachen Konvention des Aufrufs folgtsuper().__init__ Dadurch wird sichergestellt, dass die gesamte Hierarchie genau einmal durchlaufen wird (auch ohne dass das übergeordnete Element angegeben werden muss). Das Problem tritt auf, wenn wir Argumente weitergeben:

class Foo:
    def __init__(self, *args, **kwargs):
        print("foo-init")
        super().__init__(*args, **kwargs) # error if there are arguments!

class Bar:
    def __init__(self, *args, **kwargs):
        print("bar-init")
        super().__init__(*args, **kwargs)

class Baz(Bar, Foo):
    def __init__(self, *args, **kwargs):
        print("baz-init")
        super().__init__(*args, **kwargs)

b1 = Baz() # works
b2 = Baz("error")

Was ist der Grund dafür und was ist der beste allgemeine Workaround (in meinem speziellen Fall ist er leicht lösbar, erfordert jedoch zusätzliche Kenntnisse über die Hierarchie)? Das Beste, was ich sehen kann, ist zu überprüfen, ob das übergeordnete Objekt ist und in diesem Fall keine Argumente zu geben. Das ist schrecklich hässlich.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage