令我感到困惑的是,我无法在任何地方找到明确的解释。 为什么以及何时需要在子类的同名方法中调用基类的方法?
class Child(Base):
def __init__(self):
Base.__init__(self)
def somefunc(self):
Base.somefunc(self)
当你不想完全覆盖基类中的方法时,我猜你这样做了。是真的有它的全部吗?
答案 0 :(得分:13)
通常,当您想通过修改扩展功能时,可以执行此操作,但不能完全替换基类方法。 defaultdict
就是一个很好的例子:
class DefaultDict(dict):
def __init__(self, default):
self.default = default
dict.__init__(self)
def __getitem__(self, key):
try:
return dict.__getitem__(self, key)
except KeyError:
result = self[key] = self.default()
return result
请注意,执行此操作的适当方法是use super
instead of directly calling the base class。像这样:
class BlahBlah(someObject, someOtherObject):
def __init__(self, *args, **kwargs):
#do custom stuff
super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)
答案 1 :(得分:2)
完全取决于课程和方法。
如果您只想在基本方法运行之前/之后执行某些操作或使用不同的参数调用它,您显然会在子类的方法中调用基本方法。
如果要替换整个方法,显然不要调用它。