Best Practice für Vererbung: * args, ** kwargs oder explizite Angabe von Parametern

Ich finde mich oft überschreiben von Methoden der übergeordneten Klasse und kann nie entscheiden, ob ich sollte explizit auf der Liste von Parametern oder verwenden Sie einfach eine Decke *args, **kwargs konstruieren. Ist eine version besser als die andere? Gibt es eine best practice? Welche vor-und Nachteile bin ich?

class Parent(object):

    def save(self, commit=True):
        # ...

class Explicit(Parent):

    def save(self, commit=True):
        super(Explicit, self).save(commit=commit)
        # more logic

class Blanket(Parent):

    def save(self, *args, **kwargs):
        super(Blanket, self).save(*args, **kwargs)
        # more logic

Wahrnehmung der Vorteile, die explizite Variante

  • Mehr explizite ("Zen of Python)
  • leichter zu erfassen
  • Funktion Parameter einfach zugegriffen

Wahrnehmung der Vorteile, die Decke Variante

  • mehr TROCKEN
  • übergeordneten Klasse ist leicht austauschbar
  • ändern der default Werte in übergeordnete Methode weitergegeben wird, ohne Sie zu berühren andere code

InformationsquelleAutor der Frage Maik Hoepfel | 2013-01-31

Schreibe einen Kommentar