34
親クラスのメソッドを上書きすることが多く、指定されたパラメーターを明示的に指定するか、ブランケット*args, **kwargs
を使用するか決して決してできません。あるバージョンは他のバージョンより優れていますか?ベストプラクティスはありますか?私は何の欠点があるのでしょうか? 継承のベストプラクティス:* args、** kwargs、または明示的にパラメーターを指定する
- より明示的な明示的な変異体の
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
知覚利点は容易の
知覚利点アクセスブランケットバリエーションNT
- よりDRY
- 親クラスは簡単に交換可能です 親メソッドにおけるデフォルト値の
- 変更は、他のコードに触れることなく伝播され
多くのことは、サブクラス化しているものに正確に依存します...基本クラスのメソッドに追加のkwargsを追加する可能性が高い場合は、 '' kwargs''に固執するのが大変です。これがそうでない場合、明示的にkwargsを指定することは、可読性の観点からはるかに優れています。 –
あなたは確かに情報を捨てています。明示的なものは暗黙的なものよりも優れています。 – kojiro
1)明示的にパラメータを指定し、派生したクラスで*シグネチャの変更を禁止する(そうでなければ 'super'と多重継承でうまくいく)、または2)' ** kwargs'を使ってメソッドのシグネチャを変更できるようにする。どちらを使うべきかは、おそらく状況に依存します。 – Bakuriu