Wie alle Argumente von __init__ an die Superklasse übergeben werden

8

Gibt es irgendeine Magie, die ich in Python benutzen kann, um den Superkonstruktor effektiv zu benutzen, indem ich einfach ein paar zusätzliche Argumente hinzufüge?

Idealerweise würde ich gerne etwas wie:

verwenden %Vor%

Und dann können Sie die ursprünglichen Konstruktorargumente mit einigen Extras aus meiner Klasse kombinieren. Wie so:

%Vor%

Ich benutze Python 2.6, aber wenn die Magie nur in einer höheren Version von Python erreicht werden kann, dann bin ich auch interessiert.

EDIT: Ich sollte wahrscheinlich erwähnen, dass oben nicht funktioniert. Der Fehler lautet: TypeError: __init__() takes at most 2 arguments (3 given)

    
Nux 14.06.2013, 10:43
quelle

1 Antwort

25

Sie sind fast da:

%Vor%

Python 2 ist etwas pingelig und witzig beim Mischen von *args , **kwargs und zusätzlichen Argumenten für named keyword; Am besten ist es, nicht zusätzliche Argumente für explizite Schlüsselwörter hinzuzufügen und sie stattdessen nur von kwargs zu übernehmen.

Die Methode dict.pop() entfernt den Schlüssel aus dem Wörterbuch, falls vorhanden. Rückgabe des zugehörigen Werts oder des von uns angegebenen Standards, falls dieser fehlt. Das bedeutet, dass wir nicht verbose an die Superklasse weitergeben. Verwenden Sie kwargs.get('verbose', True) , wenn Sie nur überprüfen möchten, ob der Parameter gesetzt wurde, ohne ihn zu entfernen.

    
Martijn Pieters 14.06.2013, 10:46
quelle