Inheritance best practice : *args, **kwargs or explicitly specifying parameters
<p>I often find myself overwriting methods of a parent class, and can never decide if I should explicitly list given parameters or just use a blanket <code>*args, **kwargs</code> construct. Is one version better than the other? Is there a best practice? What (dis-)advantages am I missing?</p>

<pre><code>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
</code></pre>

<p><strong>Perceived benefits of explicit variant</strong></p>

<ul>
<li>More explicit (Zen of Python)</li>
<li>easier to grasp</li>
<li>function parameters easily accessed</li>
</ul>

<p><strong>Perceived benefits of blanket variant</strong></p>

<ul>
<li>more DRY</li>
<li>parent class is easily interchangeable</li>
<li>change of default values in parent method is propagated without touching other code</li>
</ul>
