我经常发现自己覆盖了父类的方法,并且永远无法决定是否应该明确列出给定的参数或只使用一揽子*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
显式变体的感知好处
- 更明确(Python 之禅)
- 更容易掌握
- 易于访问的函数参数
毯式变体的感知好处
- 更干
- 父类很容易互换
- 在不触及其他代码的情况下传播父方法中默认值的更改