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

2024-04-29 07:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这让我困惑,我怎么找不到一个明确的解释。 为什么以及何时需要在子类的同名方法内调用基类的方法?

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

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

我猜你这样做是因为你不想完全覆盖基类中的方法。真的只有这些吗?


Tags: 方法selfchildbaseinitdef基类子类
2条回答

它完全取决于类和方法。

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

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

通常,如果希望通过修改扩展功能,但不完全替换基类方法,则可以执行此操作。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 ^{} 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)

相关问题 更多 >