这让我很困惑,为什么我在任何地方都找不到一个清晰的解释。为什么以及何时需要在子类的同名方法中调用基类的方法?
class Child(Base):
def __init__(self):
Base.__init__(self)
def somefunc(self):
Base.somefunc(self)
我猜想当你不想完全重写基类中的方法时,你可以这样做。这真的是所有的事情吗?
发布于 2012-05-02 14:37:36
通常,当您想要通过修改而不是完全替换基类方法来扩展功能时,可以这样做。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)
发布于 2012-05-02 14:30:04
它完全依赖于类和方法。
如果你只是想在基方法运行之前/之后做一些事情,或者用不同的参数调用它,那么显然你可以在你的子类的方法中调用基方法。
如果你想替换整个方法,你显然不会调用它。
https://stackoverflow.com/questions/10408739
复制相似问题