use*_*281 16 python inheritance class overwrite base-class
令我感到困惑的是,我无法在任何地方找到明确的解释.为什么以及何时需要在子类的同名方法中调用基类的方法?
class Child(Base):
def __init__(self):
Base.__init__(self)
def somefunc(self):
Base.somefunc(self)
Run Code Online (Sandbox Code Playgroud)
当你不想完全覆盖基类中的方法时,我猜你这样做了.是真的有它的全部吗?
Joe*_*ett 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
Run Code Online (Sandbox Code Playgroud)
请注意,执行此操作的适当方法是使用super而不是直接调用基类.像这样:
class BlahBlah(someObject, someOtherObject):
def __init__(self, *args, **kwargs):
#do custom stuff
super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)
Run Code Online (Sandbox Code Playgroud)
这完全取决于类和方法。
如果您只想在基本方法运行之前/之后执行某些操作或使用不同的参数调用它,那么显然您可以在子类的方法中调用基本方法。
如果你想替换整个方法,你显然不会调用它。