16

It baffles me how I can't find a clear explanation of this anywhere. Why and when do you need to call the method of the base class inside the same-name method of the child class?

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

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

I'm guessing you do this when you don't want to completely overwrite the method in the base class. is that really all there is to it?

4

2 回答 2

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

请注意,执行此操作的适当方法是使用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)
于 2012-05-02T06:37:36.463 回答
2

It completely depends on the class and method.

If you just want to do something before/after the base method runs or call it with different arguments, you obviously call the base method in your subclass' method.

If you want to replace the whole method, you obviously do not call it.

于 2012-05-02T06:30:04.127 回答