Python继承 - 在子类中调用基类方法?

时间:2012-05-02 06:27:12

标签: python class inheritance base-class overwrite

令我感到困惑的是,我无法在任何地方找到明确的解释。 为什么以及何时需要在子类的同名方法中调用基类的方法?

class Child(Base):
    def __init__(self):
        Base.__init__(self)

    def somefunc(self):
        Base.somefunc(self)

当你不想完全覆盖基类中的方法时,我猜你这样做了。是真的有它的全部吗?

2 个答案:

答案 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)

完全取决于课程和方法。

如果您只想在基本方法运行之前/之后执行某些操作或使用不同的参数调用它,您显然会在子类的方法中调用基本方法。

如果要替换整个方法,显然不要调用它。